Почему Android использует Java?




permission denial starting intent act android media action image_capture (8)

Родительский код не обязательно быстрее, чем Java-код. Где ваши данные профиля показывают, что собственный код может работать быстрее?

Почему Java?

  • Android работает на разных аппаратных платформах. Вам нужно будет скомпилировать и оптимизировать свой собственный код для каждой из этих разных платформ, чтобы увидеть реальные преимущества.

  • Существует большое количество разработчиков, уже владеющих Java.

  • Java имеет огромную поддержку с открытым исходным кодом, и многие библиотеки и инструменты доступны, чтобы упростить жизнь разработчиков.

  • Java защищает вас от многих проблем, присущих собственному коду, таких как утечка памяти, использование плохих указателей и т. Д.

  • Java позволяет им создавать приложения для песочницы и создавать лучшую модель безопасности, чтобы одно плохое приложение не могло уничтожить всю вашу ОС.

Хорошо, это действительно нужно спросить у кого-то из Google, но мне просто нужны другие мнения.

Даже Android поддерживает приложения с внутренним кодом, основным средством разработки является Java. Но почему? Я имею в виду, не слишком ли сложно интерпретировать код на мобильном устройстве? Представляя Froyo, Google сказал, что новый JIT-компилятор может достичь в 2-5 раз быстрее приложений. Это означает, что использование Java поверх собственного кода в 2-х раз медленнее.

Да, я знаю, что использование управляемых кодовых приложений является более безопасным с точки зрения стабильности системы, поскольку виртуальная машина лучше контролирует программу, но все же это падение производительности огромно, и я не вижу смысла использовать его.


Как ни странно, основная проблема заключается в том, что Android разработан как переносная ОС для работы на самых разных аппаратных средствах. Он также основывается на структуре и языке, знакомых многим существующим разработчикам мобильных устройств.

Наконец, я бы сказал, что это ставка на будущее - независимо от того, какие проблемы с производительностью существуют, становится неуместным по мере улучшения аппаратного обеспечения - в равной степени, заставляя разработчиков кодоваться против абстракции, Google может вырвать и изменить базовую ОС гораздо легче, чем если бы разработчики кодировали API POSIX / Unix.

Для большинства приложений накладные расходы на использование языка на основе VM по сравнению с родным невелики (узким местом для приложений, использующих веб-сервисы, например Twitter, в основном являются сетевые). Palm WebOS также демонстрирует это - и в качестве основного языка используется JavaScript, а не Java.

Учитывая, что почти все виртуальные машины JIT сводятся к собственному коду, скорость исходного кода часто сопоставима с собственной скоростью. Многие задержки, связанные с языками более высокого уровня, в меньшей степени связаны с накладными расходами виртуальной машины, чем другие факторы (сложное время выполнения объекта, «безопасность», проверяющее доступ к памяти, делая проверку границ и т. Д.).

Также помните, что независимо от языка, используемого для написания приложения, большая часть фактической работы выполняется в API более низкого уровня. Язык верхнего уровня часто просто объединяет вызовы API.

Конечно, есть множество исключений из этого правила - игры, аудио и графические приложения, которые вызывают ограничения на аппаратное обеспечение телефона. Даже в iOS разработчики часто опускаются на C / C ++, чтобы получить скорость в этих областях.


Улучшение стабильности системы очень важно на устройстве, таком как сотовый телефон.

Безопасность еще важнее. Среда Android позволяет пользователям запускать полунадежные приложения, которые могут использовать телефон по-настоящему неприятным образом без превосходной безопасности. Запустив все приложения на виртуальной машине, вы гарантируете, что ни одно приложение не сможет использовать ядро ​​ОС, если в реализации VM не существует недостатка. Реализация ВМ, в свою очередь, предположительно мала и имеет небольшую, четко определенную поверхность безопасности.

Возможно, самое главное, когда программы скомпилированы для кода для виртуальной машины, их не нужно перекомпилировать для нового оборудования. Рынок телефонных чипов разнообразен и быстро меняется, так что это очень важно.

Кроме того, использование Java делает менее вероятным, что пользователи приложений пишут сами. Отсутствие переполнения буфера, ошибки с указателями и т. Д. ...


На уровне байтового кода Android не использует Java. Источником является Java, но он не использует JVM.


Новый JIT запускает приложения в 2 - 5 раз быстрее, чем старый dalvikVM (оба JAVA). Так что сравнение не C над JAVA, но JIT над dalvikVM.


Прежде всего, по словам Google, Android не использует Java. Вот почему Oracle подает в суд на Google. Oracle утверждает, что Android нарушает некоторые технологии Java, но Google говорит, что это Dalvik.

Во-вторых, я не видел интерпретатора байтового кода Java с 1995 года.

Можете ли вы поддержать свою гипотезу о производительности с некоторыми фактическими критериями? Объем ваших презумпций не представляется оправданным с учетом неточной справочной информации, которую вы предоставляете.


Прежде всего, это то же самое, что и Windows Mobile или iPhone. Для .NET Framework нужна собственная виртуальная машина, а также какао.

И даже если производительность не в лучшем случае, потому что это интерпретация байтового кода, андроид приносит все сообщество java в качестве потенциальных разработчиков. Больше приложений, больше клиентов и т. Д.

Чтобы закончить, производительность не так уж плоха, поэтому Java используется даже на небольших устройствах (см. JavaMe).


Некоторые моменты:

  1. Java - это известный язык, разработчики знают его и не должны его изучать

  2. сложнее застрелить себя с Java, чем с помощью кода C / C ++, поскольку он не имеет арифметики указателей

  3. он работает на виртуальной машине, поэтому нет необходимости перекомпилировать его для каждого телефона и легко защищать

  4. большое количество инструментов для разработки Java (см. пункт 1)

  5. несколько мобильных телефонов уже использовали Java ME, поэтому Java была известна в отрасли

  6. разница в скорости не является проблемой для большинства приложений; если это так, вы должны закодировать язык низкого уровня





android