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

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

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

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

Ответ 1

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

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

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

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

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

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

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

Ответ 2

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

Ответ 3

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

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

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

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

Ответ 4

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

Почему Java?

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

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

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

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

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

Ответ 5

Java имеет довольно убедительный аргумент для Google, использующего его в Android: у него есть огромная база разработчиков. Все эти разработчики (вроде) готовы к разработке для своей мобильной платформы.

Имейте в виду, что с технической точки зрения Android не использует чистую Java.

Ответ 6

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

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

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

Ответ 7

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

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

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

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

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

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

Ответ 8

Прежде всего, о том же, что и Windows Mobile или iPhone, для .net-инфраструктуры нужна собственная виртуальная машина, а также cocoa.

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

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

Ответ 9

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