Dalvik (программное обеспечение)

Виртуальная машина, используемая Android для выполнения приложений Java
Далвик
Оригинальный автор(ы)Дэн Борнштейн
Репозиторий
  • android.googlesource.com/platform/dalvik
Операционная системаядро Linux
Платформаандроид
ПреемникAndroid-среда выполнения
ТипВиртуальная машина
ЛицензияЛицензия Apache 2.0
Веб-сайтsource.android.com/devices/tech/dalvik/index.html

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

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

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

История

Dalvik, названный в честь города в Исландии его создателем Дэном Борнстейном [6] , был разработан для встраиваемых устройств с очень низким объемом оперативной памяти и процессора [7] для запуска кода Java и в конечном итоге поддержки C++ для «тяжелых приложений» и JavaScript для «легких приложений, похожих на виджеты» в качестве языков первого класса с Java, обслуживающей все остальное. Android Native Development Kit , который в конечном итоге проложил путь для поддержки C++, существует с момента первого публичного выпуска Dalvik. По словам Борнстейна, отображение исполняемых файлов и библиотек в памяти между несколькими процессами и создание более быстрого интерпретатора с семантикой на основе регистров во многом определили раннюю разработку набора инструкций с байтовым выравниванием и виртуальной машины. Опыт работы с J2ME на Sidekick в Danger , Борнстейн обнаружил, что он был слишком урезанным и довольно ограниченным для Android. В то время как улучшения, такие как Isolates , которые тогда планировала Sun, сделали изоляцию процессов неосуществимой, поскольку она нарушила модель безопасности Android внутри устройства. Для Dalvik VM Борнштейн в частности черпал вдохновение из книги «The Case for Register Machines» [6], написанной Брайаном Дэвисом и его коллегами из Тринити-колледжа в Дублине. [8]

Dalvik был открыт под лицензией Apache License v2, как и остальная часть Android Open Source Project в 2008 году. [9]

Архитектура

Сравнение архитектур Dalvik и ART

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

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

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

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

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

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

Android 2.2 "Froyo" привнес в Dalvik трассировочную компиляцию just-in-time (JIT) , оптимизируя выполнение приложений путем постоянного профилирования приложений при каждом запуске и динамической компиляции часто выполняемых коротких сегментов их байт-кода в машинный код . В то время как Dalvik интерпретирует остальную часть байт-кода приложения, собственное выполнение этих коротких сегментов байт-кода, называемых "трассами", обеспечивает значительное повышение производительности. [13] [14] [15]

Производительность

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

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

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

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

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

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

Dalvik публикуется на условиях Apache License 2.0. [21] Некоторые [ кто? ] говорят, что Dalvik — это реализация в чистой комнате, а не разработка поверх стандартной среды выполнения Java, что означает, что она не наследует ограничения лицензии, основанные на авторских правах, ни от стандартной версии, ни от среды выполнения Java с открытым исходным кодом. [22] Oracle и некоторые обозреватели оспаривают это. [23]

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

Смотрите также

Ссылки

  1. ^ "Отладка сбора мусора ART" . Получено 6 октября 2015 г. Среда выполнения Dalvik больше не поддерживается и не доступна [в текущих версиях Android], а ее формат байт-кода теперь используется ART.
  2. ^ Запись в журнале, ссылающаяся на источник названия
  3. ^ "Google Calling: Inside Android, gPhone SDK". onlamp.com . Архивировано из оригинала 2017-01-10 . Получено 2008-02-05 .
  4. ^ Шон Бакли (2013-11-06). «Эксперимент 'ART' в Android KitKat увеличивает время работы батареи и ускоряет работу приложений». Engadget . Получено 2014-07-05 .
  5. ^ Дэниел П. (2013-11-07). «Экспериментальная среда выполнения Google ART в Android KitKat может ускорить выполнение приложений в два раза». phonearena.com . Получено 2014-07-05 .
  6. ^ ab Live Q&A с Дэном Борнштейном, создателем виртуальной машины Dalvik. InfoQ . 29 сентября 2015 г. – через YouTube.
  7. ^ Google I/O 2008 — Внутреннее устройство виртуальной машины Dalvik. Google . 4 июня 2008 г. — через YouTube.
  8. ^ Дэвис, Брайан; Битти, Эндрю; Кейси, Кевин; Грегг, Дэвид; Т. Уолдрон, Джон (8 июня 2003 г.). «Дело в пользу виртуальных регистровых машин» (PDF) . Труды семинара 2003 г. по интерпретаторам, виртуальным машинам и эмуляторам . стр.  41–49 . doi :10.1145/858570.858575. ISBN 1-58113-655-2. Архивировано из оригинала (PDF) 1 февраля 2024 года. {{cite book}}: |journal=проигнорировано ( помощь )
  9. ^ Beschizza, Rob (12 ноября 2007 г.). "Android SDK Open For Code". WIRED . Архивировано из оригинала 31 января 2024 г.
  10. ^ Борнштейн, Дэн (29.05.2008). "Презентация внутренних компонентов Dalvik VM" (PDF) . стр. 22. Архивировано из оригинала (PDF) 16.04.2017 . Получено 16.08.2010 .
  11. Роуз, Джон (31.05.2008). "с Android и Dalvik на Google I/O". Архивировано из оригинала 04.06.2008 . Получено 08.06.2008 .
  12. ^ Google (2009-04-13). "Что такое Android?". Архивировано из оригинала 2009-06-27 . Получено 2009-04-19 .
  13. ^ Бен Ченг; Билл Бузби (май 2010 г.). «JIT-компилятор для виртуальной машины Android Dalvik» (PDF) . android-app-developer.co.uk . стр.  5–14 . Архивировано из оригинала (PDF) 2015-11-06 . Получено 18 марта 2015 г. .
  14. Фил Никинсон (26 мая 2010 г.). «Разработчик Google Android рассказывает больше о Dalvik и JIT в Froyo». androidcentral.com . Архивировано из оригинала 2014-07-14 . Получено 8 июля 2014 г.
  15. ^ "Nexus One работает под управлением Android 2.2 Froyo. Насколько он быстр по сравнению с 2.1? О, всего на 450% быстрее". 2010-05-13 . Получено 2010-05-21 .
  16. ^ Ши, Юньхэ; Грегг, Дэвид; Битти, Эндрю; Эртл, М. Антон (11.06.2005). "Virtual Machine Showdown: Stack Versus Registers" (PDF) . Получено 22.12.2009 .
  17. ^ Vandette, Bob (2010-11-22). "Java SE Embedded Performance Versus Android 2.2". Oracle Corporation . Архивировано из оригинала 2011-06-28 . Получено 2011-09-04 . Результаты показывают, что хотя новый JIT Android является улучшением по сравнению с его реализацией только интерпретатора, Android все еще отстает от производительности нашей Java SE Embedded с поддержкой Hotspot. Как вы можете видеть из приведенных выше результатов, Java SE Embedded может выполнять байт-коды Java в 2-3 раза быстрее, чем Android 2.2.
  18. ^ Хёнг-Сок О; Бом-Джун Ким; Хёнг-Кю Чой; Су-Мук Мун (2012). Труды 10-го Международного семинара по технологиям Java для систем реального времени и встраиваемых систем - JTRES '12 . Ассоциация вычислительной техники . стр. 115. doi :10.1145/2388936.2388956. ISBN 9781450316880. S2CID  36316611. Однако в режиме JITC Dakvik медленнее HotSpot более чем в 2,9 раза, а размер его сгенерированного кода не меньше, чем у HotSpot из-за худшего качества кода и кода трассировки.
  19. ^ "Top AndEBench Scores". www.eembc.org . Получено 23.03.2014 .
  20. ^ Батюк, Леонид; Шмидт, Обри-Деррик; Шмидт, Ганс-Гюнтер; Камтепе, Ахмет; Албайрак, Сахин (2009-04-29). «Разработка и бенчмаркинг собственных приложений Linux на Android». MobileWireless Middleware, Operating Systems, and Applications . Lecture Notes of the Institute for Computer Sciences, Social Informatics and Telecommunications Engineering. Vol. 7. pp.  381– 392. Bibcode : 2009mmos.book..381B. doi : 10.1007/978-3-642-01802-2_28. ISBN 978-3-642-01801-5. S2CID  12131309. Результаты показывают, что собственные приложения C могут быть до 30 раз быстрее, чем идентичный алгоритм, работающий в Dalvik VM. Приложения Java могут ускориться до 10 раз, если использовать JNI.
  21. ^ "Загрузка исходного дерева - Android Open Source". Android.git.kernel.org. Архивировано из оригинала 2009-04-17 . Получено 2012-06-07 .
  22. ^ Гарлинг, Кейлеб. «Эксперты Google и Oracle спорят из-за Java Mimic для Android». Wired .
  23. ^ Эд Ботт (8 сентября 2011 г.). "Настоящая история Java и Android, рассказанная Google". ZDNet . Получено 27.11.2011 . Определение реализации "чистой комнаты" заключается в том, что инженеры, пишущие код, не имеют прямого доступа к исходному, защищенному авторским правом материалу, включая код, спецификации и другую документацию. Это проблема для Google, как я отметил во вчерашнем посте, поскольку есть существенные доказательства того, что инженеры, работающие над проектом, имели прямой доступ к защищенному авторским правом материалу.
  24. ^ "Oracle подает в суд на Google из-за Java в устройствах Android". digitaltrends.com. 2010-08-13 . Получено 2011-08-08 .
  25. ^ Джеймс Никколаи (2010-08-12). "Oracle подает в суд на Google из-за использования Java в Android". Computerworld . Получено 2010-08-13 .
  26. ^ Марк Хачман (2010-08-13). «Oracle подает в суд на Google из-за использования Android Java». Журнал PC . Ziff Davis .
  27. Джош Ловенсон (23 мая 2012 г.). «Присяжные оправдывают Google в нарушении патентов Oracle». ZDNet . Получено 25.05.2012 .
  28. ^ Джо Маллин (31 мая 2012 г.). «Google выигрывает решающее решение по API, дело Oracle разгромлено». Ars Technica . Получено 01.06.2012 .
  29. ^ Niccolai, James (20 июня 2012 г.). «Oracle соглашается на «нулевые» убытки в иске Google, подает апелляцию». Архивировано из оригинала 2023-04-01 . Получено 2012-06-23 .
  30. ^ Адам Аутлер (16 мая 2012 г.). "Обновление по Oracle Versus Google Trial". Архивировано из оригинала 2013-05-16 . Получено 2013-01-18 . Большая часть заявлений Oracle основана на 9 строках кода, содержащихся в Java.Util.Arrays.rangeCheck(). Вот код, о котором идет речь:...
  • Байт-код Dalvik – официальная документация Android по набору инструкций
  • Формат исполняемого файла Dex – официальная документация Android
  • Компилятор JIT для виртуальной машины Android Dalvik на YouTube , Google I/O 2010, Бен Ченг и Билл Бузби
  • Внутреннее устройство виртуальной машины Dalvik, архив 2010-03-01 на Wayback Machine , Google I/O 2008, Дэн Борнштейн
  • Вопрос на 800 миллионов долларов: в чем разница между товарным знаком и авторским правом?
Взято с "https://en.wikipedia.org/w/index.php?title=Dalvik_(программное обеспечение)&oldid=1271986830"