Почему Android использует Java? [закрытый]



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



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



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

533   9  

9 ответов:

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

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

  2. труднее стрелять в себя с Java, чем с кодом C / C++, так как у него нет арифметики указателя

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

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

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

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

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

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

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

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

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

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

Почему Java?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

прежде всего, это примерно то же самое, что windows mobile или iPhone, .net framework нуждается в собственной виртуальной машине, а также cocoa.

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

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

Comments

    Ничего не найдено.