Далвик (программное обеспечение)
Оригинальный автор(ы) | Дэн Борнштейн |
---|---|
Репозиторий | |
Операционная система | Ядро Linux |
Платформа | Андроид |
Преемник | Android-среда выполнения |
Тип | Виртуальная машина |
Лицензия | Лицензия Апач 2.0 |
Веб-сайт | источник |
Dalvik — это виртуальная машина (ВМ) процессов (VM) в операционной системе Android , которая выполняет приложения, написанные для Android. [1] (Формат байт-кода Dalvik по-прежнему используется в качестве формата распространения, но больше не используется во время выполнения в новых версиях Android.) Dalvik был неотъемлемой частью стека программного обеспечения Android в (теперь не поддерживаемых) версиях Android 4.4 «KitKat» и более ранних версиях, которые были обычно используется на мобильных устройствах, таких как мобильные телефоны и планшетные компьютеры , а также на некоторых устройствах, таких как смарт-телевизоры и носимые устройства . Dalvik — это программное обеспечение с открытым исходным кодом , первоначально написанное Дэном Борнштейном, который назвал его в честь рыбацкой деревни Дальвик в Эйяфьордуре , Исландия . [2] [3]
Программы для Android обычно пишутся на Java и компилируются в байт-код для виртуальной машины Java , который затем транслируется в байт-код Dalvik и сохраняется в .dex
( исполняемый файл Dalvik ) и .odex
( Оптимизированные исполняемые файлы Dalvik ); связанные термины odex и de-odex связаны с соответствующими преобразованиями байт-кода. Компактный формат исполняемого файла Dalvik предназначен для систем с ограниченным объемом памяти и скоростью процессора .
Преемником Dalvik является Android Runtime (ART), который использует тот же байт-код и файлы .dex (но не файлы .odex), причем последовательность направлена на повышение производительности. Новая среда выполнения была впервые включена в Android 4.4 «KitKat» в качестве технологической предварительной версии . [4] [5] и полностью заменил Dalvik в более поздних версиях; Android 5.0 «Lollipop» — первая версия, в которой единственной включенной средой выполнения является ART.
История [ править ]
Далвик, названный в честь города в Исландии его создателем Дэном Борнштейном. [6] был разработан для встраиваемых устройств с очень низким объемом оперативной памяти и процессора. [7] для запуска кода Java и, в конечном итоге, поддерживать C ++ для «тяжелых приложений» и JavaScript для «легких приложений, похожих на виджеты» в качестве первоклассных языков, а Java удовлетворяет все остальное. Android Native Development Kit , который в конечном итоге открыл путь для поддержки C++, существует с момента первого публичного выпуска Dalvik. По словам Борнштейна, исполняемые файлы и библиотеки, отображающие память в нескольких процессах, а также создание более быстрого интерпретатора с семантикой на основе регистров во многом способствовали раннему проектированию набора команд с выравниванием по байтам и виртуальной машины. Имея опыт работы с J2ME над Sidekick at Danger , Борнштейн обнаружил, что он слишком урезан и довольно ограничен для Android. В то время как такие улучшения, как изоляция , запланированная Sun, сделали изоляцию процессов невозможной, поскольку они нарушили модель безопасности Android внутри устройства. При создании Dalvik VM Борнштейн, в частности, черпал вдохновение из книги «Дело о регистровых машинах». [6] автор Брайан Дэвис и др. из Тринити-колледжа в Дублине. [8]
Dalvik был открыт под лицензией Apache License v2 как остальная часть проекта Android с открытым исходным кодом в 2008 году. [9]
Архитектура [ править ]
В отличие от виртуальных машин Java , которые являются стековыми машинами , виртуальная машина Dalvik использует архитектуру на основе регистров , которая требует меньшего количества, как правило, более сложных инструкций виртуальной машины. Программы Dalvik пишутся на Java с использованием интерфейса программирования приложений (API) Android, компилируются в байт-код 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 была реализована JIT-компиляция на основе трассировки , оптимизирующая выполнение приложений за счет постоянного профилирования приложений при каждом их запуске и динамической компиляции часто выполняемых коротких сегментов их байт-кода в собственный машинный код . В то время как Dalvik интерпретирует остальную часть байт-кода приложения, собственное выполнение этих коротких сегментов байт-кода, называемых «трассами», обеспечивает значительное повышение производительности. [13] [14] [15]
Производительность [ править ]
Относительные преимущества стековых машин по сравнению с подходами на основе регистров являются предметом постоянных дискуссий. [16]
Как правило, машины на основе стека должны использовать инструкции для загрузки данных в стек и манипулирования этими данными, и, таким образом, требуют больше инструкций, чем регистровые машины, для реализации того же кода высокого уровня , но инструкции в регистровой машине должны кодировать исходный код. и регистры назначения и, следовательно, имеют тенденцию быть больше. Это различие важно для интерпретаторов виртуальных машин, для которых диспетчеризация кода операции обычно обходится дорого, наряду с другими факторами, аналогичными важными для компиляции «точно в срок» .
Тесты, проведенные на 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 г. [update], тесты, выполненные на устройстве Android, по-прежнему показывают коэффициент 100 между собственными приложениями и приложением Dalvik на одном устройстве Android. [19] [ оригинальное исследование? ] [ неправильный синтез? ] При выполнении тестов с использованием раннего интерпретатора 2009 года как собственный интерфейс Java (JNI), так и собственный код показали ускорение на порядок. [20]
Лицензирование и патенты [ править ]
Dalvik публикуется на условиях лицензии Apache 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, а судья первой инстанции постановил, что структура Java API, используемая Google, не защищена авторским правом. [27] [28] Стороны согласились выплатить нулевую компенсацию за 9 строк скопированного кода. [29] [30]
См. также [ править ]
- Android-среда выполнения
- Разработка программного обеспечения для Android
- Виртуализация приложений
- Сравнение программного обеспечения для виртуализации приложений
- Сравнение Java и Android API
- Декомпилятор JEB – декомпилятор Dalvik (DEX и APK)
- Виртуальная машина Dalvik Turbo – проприетарная альтернативная реализация Dalvik.
Ссылки [ править ]
- ^ «Отладка сборки мусора ART» . Проверено 6 октября 2015 г.
Среда выполнения Dalvik больше не поддерживается и не доступна [в текущих версиях Android], а формат ее байт-кода теперь используется ART.
- ^ Запись в журнале со ссылкой на источник названия.
- ^ «Google Calling: внутри Android, gPhone SDK» . onlamp.com . Архивировано из оригинала 10 января 2017 г. Проверено 5 февраля 2008 г.
- ^ Шон Бакли (06 ноября 2013 г.). « Эксперимент «ART» в Android KitKat увеличивает время автономной работы и ускоряет работу приложений» . Engadget . Проверено 5 июля 2014 г.
- ^ Дэниел П. (07 ноября 2013 г.). «Экспериментальная среда выполнения Google ART в Android KitKat может обеспечить вдвое более быстрое выполнение приложений» . phonearena.com . Проверено 5 июля 2014 г.
- ^ Jump up to: Перейти обратно: а б Живые вопросы и ответы с Дэном Борнштейном, создателем Dalvik VM . ИнфоQ . 29 сентября 2015 г. – через YouTube.
- ^ Google I/O 2008 — Внутреннее устройство виртуальной машины Dalvik . Google . 4 июня 2008 г. - через YouTube.
- ^ Дэвис, Брайан; Битти, Эндрю; Кейси, Кевин; Грегг, Дэвид; Т. Уолдрон, Джон (8 июня 2003 г.). «Дело о виртуальных регистровых машинах» (PDF) . Ассоциация вычислительной техники . дои : 10.1145/858570.858575 . Архивировано из оригинала (PDF) 1 февраля 2024 года.
- ^ Бешицца, Роб (12 ноября 2007 г.). «Android SDK открыт для кода» . ПРОВОДНОЙ . Архивировано из оригинала 31 января 2024 года.
- ^ Борнштейн, Дэн (29 мая 2008 г.). «Презентация внутренних компонентов Dalvik VM» (PDF) . п. 22. Архивировано из оригинала (PDF) 16 апреля 2017 г. Проверено 16 августа 2010 г.
- ^ Роуз, Джон (31 мая 2008 г.). «с Android и Dalvik в Google I/O» . Архивировано из оригинала 4 июня 2008 г. Проверено 8 июня 2008 г.
- ^ Google (13 апреля 2009 г.). «Что такое Андроид?» . Архивировано из оригинала 27 июня 2009 г. Проверено 19 апреля 2009 г.
- ^ Бен Ченг; Билл Бузби (май 2010 г.). «JIT-компилятор для Dalvik VM Android» (PDF) . android-app-developer.co.uk . стр. 5–14. Архивировано из оригинала (PDF) 6 ноября 2015 г. Проверено 18 марта 2015 г.
- ^ Фил Никинсон (26 мая 2010 г.). «Разработчик Google Android объясняет больше о Dalvik и JIT во Froyo» . androidcentral.com . Архивировано из оригинала 14 июля 2014 г. Проверено 8 июля 2014 г.
- ^ «Nexus One работает под управлением Android 2.2 Froyo. Насколько он быстр по сравнению с версией 2.1? О, всего примерно на 450 % быстрее» . 13 мая 2010 г. Проверено 21 мая 2010 г.
- ^ Ши, Юнхэ; Грегг, Дэвид; Битти, Эндрю; Эртль, М. Антон (11 июня 2005 г.). «Разборка виртуальных машин: стек и регистры» (PDF) . Проверено 22 декабря 2009 г.
- ^ Вандетт, Боб (22 ноября 2010 г.). «Производительность встроенной Java SE в сравнении с Android 2.2» . Корпорация Оракл . Архивировано из оригинала 28 июня 2011 г. Проверено 4 сентября 2011 г.
Результаты показывают, что, хотя новый JIT для Android является улучшением по сравнению с реализацией только интерпретатора, Android по-прежнему отстает по производительности от встроенного Java SE Embedded с поддержкой Hotspot. Как видно из приведенных выше результатов, Java SE Embedded может выполнять байт-коды Java в 2–3 раза быстрее, чем Android 2.2.
- ^ Хён Сок О; Бом-Джун Ким; Хён-Гю Чой; Су-Мук Мун (2012). Материалы 10-го международного семинара по Java-технологиям для систем реального времени и встраиваемых систем — JTRES '12 . Ассоциация вычислительной техники . п. 115. дои : 10.1145/2388936.2388956 . ISBN 9781450316880 . S2CID 36316611 .
Однако в режиме JITC Dakvik медленнее HotSpot более чем в 2,9 раза, а размер его генерируемого кода не меньше, чем у HotSpot из-за худшего качества кода и кода цепочки трассировки.
- ^ «Лучшие результаты AndEBench» . www.eembc.org . Проверено 23 марта 2014 г.
- ^ Батюк, Леонид; Шмидт, Обри-Деррик; Шмидт, Ганс-Гюнтер; Камтепе, Ахмет; Албайрак, Шахин (29 апреля 2009 г.). «Разработка и тестирование собственных приложений Linux на Android». Промежуточное программное обеспечение, операционные системы и приложения MobileWireless . Конспекты лекций Института компьютерных наук, социальной информатики и телекоммуникационной техники. Том. 7. С. 381–392. Бибкод : 2009mmos.book..381B . дои : 10.1007/978-3-642-01802-2_28 . ISBN 978-3-642-01801-5 . S2CID 12131309 .
Результаты показывают, что собственные приложения C могут работать до 30 раз быстрее, чем идентичный алгоритм, работающий в Dalvik VM. Приложения Java могут ускориться до 10 раз при использовании JNI.
- ^ «Загрузка дерева исходного кода — Android с открытым исходным кодом» . Android.git.kernel.org. Архивировано из оригинала 17 апреля 2009 г. Проверено 7 июня 2012 г.
- ^ Гарлинг, Калеб. «Эксперты Google и Oracle спорят из-за Java Mimic для Android» . Проводной .
- ^ Эд Ботт (8 сентября 2011 г.). «Настоящая история Java и Android, рассказанная Google» . ЗДНет . Проверено 27 ноября 2011 г.
Определение реализации «чистой комнаты» заключается в том, что инженеры, пишущие код, не имеют прямого доступа к исходному материалу, защищенному авторским правом, включая код, спецификации и другую документацию. Как я отметил во вчерашнем посте, это проблема для Google, поскольку существуют веские доказательства того, что инженеры, работавшие над проектом, имели прямой доступ к материалам, защищенным авторским правом.
- ^ «Oracle подает в суд на Google из-за Java в устройствах Android» . digitaltrends.com. 13 августа 2010 г. Проверено 8 августа 2011 г.
- ^ Джеймс Николаи (12 августа 2010 г.). «Oracle подает в суд на Google из-за использования Java в Android» . Компьютерный мир . Проверено 13 августа 2010 г.
- ^ Марк Хэчман (13 августа 2010 г.). «Oracle подает в суд на Google из-за использования Java в Android» . Журнал ПК . Зифф Дэвис .
- ^ Джош Ловенсон (23 мая 2012 г.). «Жюри освобождает Google от нарушения патентов Oracle» . ЗДНет . Проверено 25 мая 2012 г.
- ^ Джо Маллин (31 мая 2012 г.). «Google выигрывает решающее решение по API, дело Oracle разгромлено» . Арс Техника . Проверено 1 июня 2012 г.
- ^ Николаи, Джеймс (20 июня 2012 г.). «Oracle соглашается возместить «нулевые» убытки по иску Google, апелляционная жалоба» . Архивировано из оригинала 1 апреля 2023 г. Проверено 23 июня 2012 г.
- ^ Адам Аутлер (16 мая 2012 г.). «Обновление пробной версии Oracle против Google» . Архивировано из оригинала 16 мая 2013 г. Проверено 18 января 2013 г.
Основная часть утверждений Oracle основана на 9 строках кода, содержащихся в Java.Util.Arrays.rangeCheck(). Вот код, о котором идет речь:...
Внешние ссылки [ править ]
- Байт-код Dalvik Android. - официальная документация набора инструкций
- Формат исполняемого файла Dex — официальная документация Android
- JIT-компилятор для виртуальной машины Android Dalvik на YouTube , Google I/O 2010, Бен Ченг и Билл Бузби
- Внутренние данные Dalvik VM. Архивировано 1 марта 2010 г. в Wayback Machine , Google I/O 2008, Дэн Борнштейн.
- Вопрос на 800 миллионов долларов: в чем разница между товарным знаком и авторским правом?