Из Википедии, бесплатной энциклопедии
  (Перенаправлено с виртуальной машины Dalvik )
Перейти к навигации Перейти к поиску

Dalvik - это виртуальная машина (ВМ) с прекращенной поддержкой процесса в операционной системе Android, которая выполняет приложения, написанные для Android. [1] (Формат байт-кода Dalvik по-прежнему используется в качестве формата распространения, но больше не во время выполнения в новых версиях Android.) Dalvik был неотъемлемой частью стека программного обеспечения Android в (теперь не поддерживаемой) версии Android 4.4 «KitKat» и ранее , которые обычно использовались на мобильных устройствах, таких как мобильные телефоны и планшетные компьютеры , а также на некоторых устройствах, таких как смарт-телевизоры и носимые устройства . Dalvik - программное обеспечение с открытым исходным кодом, первоначально написанный Дэном Борнштейном, который назвал его в честь рыбацкой деревни Далвик в Эйяфьордуре , Исландия . [2] [3]

Программы для Android обычно пишутся на Java и компилируются в байт-код для виртуальной машины Java , который затем транслируется в байт-код Dalvik и сохраняется в файлах.dex ( Dalvik EXecutable ) и .odex( Optimized Dalvik EXecutable ); связанные термины odex и de-odex связаны с соответствующими преобразованиями байт-кода. Компактный формат исполняемого файла Dalvik разработан для систем с ограниченными объемами памяти и скоростью процессора .

Преемником Dalvik является Android Runtime (ART), в которой используются те же файлы байт-кода и .dex (но не файлы .odex), при этом преемственность направлена ​​на повышение производительности, прозрачное для конечных пользователей . Новая среда выполнения была включена в первый раз в Android 4.4 «KitKat» как технология предварительного просмотра , [4] [5] и заменить Dalvik полностью в более поздних версиях; Android 5.0 «Lollipop» - первая версия, в которую включена только среда исполнения ART.

Архитектура [ править ]

Сравнение Dalvik и АРТ архитектур

В отличие от виртуальных машин Java , которые представляют собой стековые машины , виртуальная машина Dalvik использует архитектуру на основе регистров, которая требует меньшего количества, как правило, более сложных инструкций виртуальной машины. Программы Dalvik пишутся на Java с использованием интерфейса прикладного программирования Android (API), компилируются в байт-код Java и при необходимости преобразуются в инструкции Dalvik.

Названный инструмент dxиспользуется для преобразования файлов Java .class в формат .dex. Несколько классов включены в один файл .dex. Дублирующиеся строки и другие константы, используемые в нескольких файлах классов, включаются в вывод .dex только один раз для экономии места. Байт- код Java также преобразуется в альтернативный набор инструкций, используемый виртуальной машиной Dalvik. Несжатый файл .dex обычно на несколько процентов меньше по размеру, чем сжатый архив Java (JAR), полученный из тех же файлов .class. [6]

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

Dalvik оптимизирован для малых требований к памяти и обладает некоторыми особенностями, которые отличают его от других стандартных виртуальных машин: [7]

  • Виртуальная машина была уменьшена, чтобы использовать меньше места.
  • Постоянный пул был изменен , чтобы использовать только 32-разрядные индексы для упрощения интерпретатора .
  • Стандартный байт-код Java выполняет 8-битные инструкции стека. Локальные переменные должны копироваться в стек операндов или из него отдельными инструкциями. Вместо этого Dalvik использует свой собственный 16-битный набор инструкций, который работает непосредственно с локальными переменными. Локальная переменная обычно выбирается 4-битным полем «виртуального регистра». Это снижает количество инструкций Dalvik и повышает скорость интерпретатора.

Согласно Google, конструкция Dalvik позволяет устройству эффективно запускать несколько экземпляров виртуальной машины. [8]

Android 2.2 «Froyo» привнес в Dalvik JIT-компиляцию на основе трассировки , оптимизируя выполнение приложений за счет постоянного профилирования приложений каждый раз, когда они запускаются, и динамической компиляции часто выполняемых коротких сегментов их байт-кода в собственный машинный код . В то время как Dalvik интерпретирует остальную часть байт-кода приложения, собственное выполнение этих коротких сегментов байт-кода, называемых «трассировками», обеспечивает значительное улучшение производительности. [9] [10] [11]

Производительность [ править ]

Телефон на базе Dalvik

Относительные преимущества стековых машин по сравнению с подходами, основанными на регистрах, являются предметом постоянных дискуссий. [12]

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

Тесты, проведенные на устройствах ARMv7 в 2010 году компанией Oracle (владелец технологии Java) со стандартными неграфическими тестами Java, показали, что виртуальная машина HotSpot для встроенной Java SE в 2–3 раза быстрее, чем виртуальная машина Dalvik на основе JIT для Android 2.2 ( первоначальный выпуск Android, который включал JIT-компилятор). [13] В 2012 году академические тесты подтвердили коэффициент 3 между HotSpot и Dalvik на одной плате Android, а также отметили, что код Dalvik был не меньше Hotspot. [14]

Кроме того, по состоянию на март 2014 года тесты, выполненные на устройстве Android, по-прежнему показывают коэффициент 100 между собственными приложениями и приложением Dalvik на том же устройстве Android. [15] [ оригинальное исследование? ] [ неправильный синтез? ] После выполнения тестов с использованием раннего интерпретатора 2009 года и Java Native Interface (JNI), и собственный код показали ускорение на порядок. [16]

Лицензирование и патенты [ править ]

Dalvik публикуется на условиях лицензии Apache License 2.0. [17] Некоторые говорят, что Dalvik - это реализация « чистой комнаты», а не разработка поверх стандартной среды выполнения Java, что означает, что он не наследует лицензионные ограничения, основанные на авторских правах, от стандартной версии или редакции Java с открытым исходным кодом. время выполнения. [18] Oracle и некоторые обозреватели оспаривают это. [19]

12 августа 2010 г. Oracle , которая приобрела Sun Microsystems в апреле 2009 г. и, следовательно, владеет правами на Java, подала в суд на Google в связи с заявленным нарушением авторских прав и патентов. Oracle утверждала, что Google при разработке Android сознательно, прямо и неоднократно нарушал интеллектуальную собственность Oracle, связанную с Java. [20] [21] [22] В мае 2012 года присяжные по этому делу пришли к выводу, что Google не нарушал патенты Oracle, и судья постановил, что структура Java API, используемых Google, не подлежит авторскому праву. [23] [24] Стороны договорились о нулевом размере установленной законом компенсации за 9 строк скопированного кода. [25] [26]

См. Также [ править ]

  • Среда выполнения Android
  • Разработка программного обеспечения для Android
  • Виртуализация приложений
  • Сравнение виртуальных машин приложений
  • Сравнение Java и Android API
  • Декомпилятор JEB - декомпилятор Dalvik (DEX и APK)
  • Виртуальная машина Dalvik Turbo - проприетарная альтернатива реализации Dalvik

Ссылки [ править ]

  1. ^ «Отладка сборки мусора ART» . Проверено 6 октября 2015 года . Среда выполнения Dalvik больше не поддерживается и не доступна [в текущих версиях Android], и ее формат байтового кода теперь используется ART.
  2. ^ Запись в журнале со ссылкой на источник названия
  3. ^ "Google Calling: Android, gPhone SDK" . onlamp.com . Проверено 5 февраля 2008 .
  4. ^ Шон Бакли (2013-11-06). « ART“эксперимент в Android KitKat увеличивает срок службы батареи и ускоряет приложения» . Engadget . Проверено 5 июля 2014 .
  5. ^ Дэниел П. (2013-11-07). «Экспериментальная среда выполнения Google ART в Android KitKat может ускорить выполнение приложений вдвое» . phonearena.com . Проверено 5 июля 2014 .
  6. ^ Борнштейн, Дэн (2008-05-29). «Презентация Dalvik VM Internals» (PDF) . п. 22 . Проверено 16 августа 2010 .
  7. ^ Роуз, Джон (2008-05-31). «с Android и Dalvik в Google I / O» . Архивировано из оригинала на 2008-06-04 . Проверено 8 июня 2008 .
  8. ^ Google (13 апреля 2009 г.). "Что такое Android?" . Проверено 19 апреля 2009 .
  9. ^ Бен Ченг; Билл Бузби (май 2010 г.). "JIT-компилятор для Android Dalvik VM" (PDF) . android-app-developer.co.uk . С. 5–14. Архивировано из оригинального (PDF) 06.11.2015 . Проверено 18 марта 2015 года .
  10. ^ Фил Никинсон (26 мая 2010). «Разработчик Google Android объясняет больше о Dalvik и JIT во Froyo» . androidcentral.com . Проверено 8 июля 2014 года .
  11. ^ «Nexus One работает под управлением Android 2.2 Froyo. Насколько он быстрее по сравнению с 2.1? О, всего лишь примерно на 450% быстрее» . 2010-05-13 . Проверено 21 мая 2010 .
  12. ^ Ши, Юньхэ; Грегг, Дэвид; Битти, Эндрю; Эртл, М. Антон (11.06.2005). «Столкновение виртуальных машин: стек против регистров» (PDF) . Проверено 22 декабря 2009 .
  13. ^ Vandette, Боб (2010-11-22). «Встроенная производительность Java SE по сравнению с Android 2.2» . Корпорация Oracle . Архивировано из оригинала на 2011-06-28 . Проверено 4 сентября 2011 . Результаты показывают, что, хотя новая JIT-версия Android представляет собой усовершенствование по сравнению с ее реализацией только через интерпретатор, Android по-прежнему отстает по производительности от Java SE Embedded с поддержкой Hotspot. Как видно из приведенных выше результатов, Java SE Embedded может выполнять байт-коды Java в 2–3 раза быстрее, чем Android 2.2.
  14. ^ Хён Сек О; Бом-Джун Ким; Хён-Гю Чой; Су-Мук Мун (2012). Материалы 10-го международного семинара по технологиям Java для систем реального времени и встроенных систем - JTRES '12 . Ассоциация вычислительной техники . п. 115. DOI : 10,1145 / 2388936,2388956 . ISBN 9781450316880. Однако в режиме JITC Dakvik медленнее, чем HotSpot, более чем в 2,9 раза, а размер его сгенерированного кода не меньше, чем у HotSpot из-за худшего качества кода и кода трассировки.
  15. ^ «Лучшие результаты AndEBench» . www.eembc.org . Проверено 23 марта 2014 .
  16. ^ Батюк, Леонид; Шмидт, Обри-Деррик; Шмидт, Ганс-Гюнтер; Камтепе, Ахмет; Албайрак, Сахин (29 апреля 2009 г.). Разработка и тестирование собственных приложений Linux на Android . Конспект лекций Института компьютерных наук, социальной информатики и телекоммуникационной техники . 7 . С. 381–392. DOI : 10.1007 / 978-3-642-01802-2_28 . ISBN 978-3-642-01801-5. S2CID  12131309 . Результаты показывают, что собственные приложения C могут быть в 30 раз быстрее, чем идентичный алгоритм, работающий в Dalvik VM. Приложения Java могут ускориться до 10 раз при использовании JNI.
  17. ^ «Загрузка дерева исходных текстов - Android с открытым исходным кодом» . Android.git.kernel.org. Архивировано из оригинала на 2009-04-17 . Проверено 7 июня 2012 .
  18. ^ https://www.wired.com/2012/04/google-oracle-experts
  19. Эд Ботт (8 сентября 2011 г.). «Настоящая история Java и Android, рассказанная Google» . ZDNet . Проверено 27 ноября 2011 . Определение «чистой комнаты» заключается в том, что инженеры, пишущие код, не имеют прямого доступа к исходным материалам, защищенным авторским правом, включая код, спецификации и другую документацию. Это проблема для Google, как я отмечал во вчерашнем сообщении, потому что есть существенные доказательства того, что инженеры, работающие над проектом, имели прямой доступ к материалам, защищенным авторским правом.
  20. ^ «Oracle предъявляет иск Google по поводу Java на устройствах Android» . digitaltrends.com. 2010-08-13 . Проверено 8 августа 2011 .
  21. ^ Джеймс NICCOLAI (2010-08-12). «Oracle подает в суд на Google из-за использования Java в Android» . Компьютерный мир . Проверено 13 августа 2010 .
  22. ^ Марк Хахман (13 августа 2010 г.). "Oracle предъявляет иск Google по поводу использования Java в Android" . Журнал ПК . Зифф Дэвис .
  23. ^ Джош Lowensohn (23 мая 2012). «Жюри освобождает Google от нарушения патентов Oracle» . ZDNet . Проверено 25 мая 2012 .
  24. Джо Маллин (31 мая 2012 г.). «Google выигрывает решающее решение по API, дело Oracle разгромлено» . Ars Technica . Проверено 1 июня 2012 .
  25. ^ NICCOLAI, Джеймс (20 июня 2012). «Oracle соглашается на« нулевой »ущерб в иске Google, апелляция глаз» . Проверено 23 июня 2012 .
  26. ^ Адам Outler (16 мая 2012). «Обновленная информация об испытании Oracle против Google» . Проверено 18 января 2013 . Основная часть заявлений Oracle основана на 9 строках кода, содержащихся в Java.Util.Arrays.rangeCheck (). Вот код, о котором идет речь: ...

Внешние ссылки [ править ]

  • Байт-код Dalvik - официальная документация Android набора инструкций
  • Формат исполняемого файла Dex - официальная документация Android
  • JIT-компилятор для Android Dalvik VM на YouTube , Google I / O 2010, Бен Ченг и Билл Бузби
  • Dalvik VM Internals , Google I / O 2008, Дэн Борнштейн
  • Вопрос на 800 миллионов долларов: в чем разница между товарным знаком и авторским правом?