Почему android построен на VM (Dalvik)
Мне любопытно узнать, что заставило google выбрать для разработки фреймворка Android на Java VM.
В процессе написания кода для андроида в течение почти 6 месяцев я заметил, что работающий код на виртуальной машине на ограниченной платформе ресурсов очень медленный. Существует много накладных расходов. Я знаю, что java переносится и т.д. И т.д., Вообще ли вообще невозможно использовать родные языки и получить как производительность, так и функции, предлагаемые виртуальной машиной? Для приложений, ориентированных на производительность, все еще заканчивается написание собственного кода и перенос его с помощью JNI,
Итак, почему Google выбрал этот конкретный стек:
- Основанное на руке ядро (понятно, ARM - лучшее для мобильных устройств)
- Linux (с открытым исходным кодом)
- Java VM (Мой вопрос)
EDIT: Я знаю java - JVM работает на одном уровне с приложениями С++ на моем сервере, но не на Android.
Что касается андроида, это не так. Как мне кажется, код С++, завернутый в JNI, работает намного быстрее, чем Java-код (заметьте, что я даже проверил с тем же кодом из статического блока в java). Я соглашусь с вашим ответьте на любую другую платформу.
Ответы
Ответ 1
В Dalvik VM используется собственный байт-код, а не байт-код Java. Он разработан очень быстро (условно говоря). Я думаю, что часть "ВМ" его названия немного красная сельдь, так как люди склонны считать, что она будет "медленной", несмотря ни на что. Вы сами это сказали, вы работаете с "платформой с ограниченными ресурсами" - это, вероятно, ваша основная причина медленной производительности, гораздо больше, чем у Dalvik VM.
Отказ от ответственности: я не эксперт по Dalvik или Android в любом случае, форме или форме. Тем не менее, похоже, что люди склонны делать много предположений об Android на основе таких идей, как "он использует виртуальную машину" и "вы пишете приложения на Java", не глядя дальше на платформу.
Смотрите это видео для получения дополнительной информации, чем вы, вероятно, когда-либо хотели узнать на внутренних языках Dalvik VM (из Google I/O 2008).
Ответ 2
1) Java, насколько мне известно, является наиболее широко распространенным языком в университетах и даже в средних школах/эквивалент. Он широко используется в профессиональном мире и имеет много кодовых баз данных, которые помогают разработчикам быстрее создавать более качественные приложения.
2) Накладные расходы - это не то, что отлично по сравнению с собственным кодом, особенно с хорошо продуманным кодом, оптимизированным JIT и контролируемым все более-хорошо спроектированным-gc.
Действительно, я думаю, что эти две причины могут оправдать, почему Java была выбрана в качестве основного языка для поддержки Android.
Ответ 3
Я думаю, что ключ - не думать о Java VM в том же смысле, о котором вы думаете о виртуализации Destkop или Server, - они очень разные. На самом базовом уровне Java VM (в данном случае Dalvik) является просто слоем перевода между байт-кодом, сгенерированным "компилятором", в собственный машинный код. Это виртуальная машина, но она не имеет таких же накладных расходов, как скажем, запуск Ubuntu в VirtualBox.
Ответ 4
Java-приложения были проверены (не всегда) так же быстро и плавно, как и приложения, написанные на таких языках, как c, С++ и т.д. Смотрите reference, просмотрите PDF файлы. Многие люди говорят, что java и vm медленны, не имея на самом деле большого количества доказательств или деталей - и эта ссылка идет на несколько деталей
Java - широко известный язык, и его легко подобрать. размещение sdk android android в руках всех этих людей, которые знают Java, уже позволяет рынку Android иметь большой потенциал для предоставления своим пользователям большого количества приложений.
отказ от ответственности: я не эксперт по этому вопросу, просто мои 2 цента