Почему Android использует Java? [закрытый]
хорошо, это действительно нужно спросить у кого-то из Google, но я просто хочу другие мнения.
даже Android поддерживает приложения с собственным кодом, основным инструментом разработки является Java. Но почему? Я имею в виду, не слишком ли медленно интерпретировать код на мобильном устройстве? При введении Froyo, Google сказал, что новый JIT-компилятор может достичь 2-5 раз быстрее приложений. Это означает, что использование Java поверх собственного кода происходит в 2-х раз медленнее.
Да, я знаю, что с помощью управляемого кода приложения безопаснее с точки зрения стабильности системы, так как виртуальная машина имеет лучший контроль над программой, но все же это падение производительности огромно, и я не вижу смысла его использовать.
9 ответов:
некоторые моменты:
Java-это известный язык, разработчики знают его и не должны его изучать
труднее стрелять в себя с Java, чем с кодом C / C++, так как у него нет арифметики указателя
Он работает в виртуальной машине, так что не надо перекомпилировать для каждого телефона там и легко
большое количество средств разработки для Java (см. пункт 1)
несколько мобильных телефонов уже использовали Java ME, поэтому Java была известна в отрасли
разница в скорости не является проблемой для большинства приложений; если бы это было вы должны кодировать на языке низкого уровня
улучшение стабильности системы очень важно на устройстве, как мобильный телефон.
безопасность еще важнее. ОС 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