Jump to content

Далвик (программное обеспечение)

Далвик
Оригинальный автор(ы) Дэн Борнштейн
Репозиторий
Операционная система Ядро Linux
Платформа Андроид
Преемник Android-среда выполнения
Тип Виртуальная машина
Лицензия Лицензия Апач 2.0
Веб-сайт источник .android /устройства /технологии /далвик /индекс .html

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]

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

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

В отличие от виртуальных машин 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]

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

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

Относительные преимущества стековых машин по сравнению с подходами на основе регистров являются предметом постоянных дискуссий. [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 г. , тесты, выполненные на устройстве 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]

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

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

  1. ^ «Отладка сборки мусора ART» . Проверено 6 октября 2015 г. Среда выполнения Dalvik больше не поддерживается и не доступна [в текущих версиях Android], а формат ее байт-кода теперь используется ART.
  2. ^ Запись в журнале со ссылкой на источник названия.
  3. ^ «Google Calling: внутри Android, gPhone SDK» . onlamp.com . Архивировано из оригинала 10 января 2017 г. Проверено 5 февраля 2008 г.
  4. ^ Шон Бакли (06 ноября 2013 г.). « Эксперимент «ART» в Android KitKat увеличивает время автономной работы и ускоряет работу приложений» . Engadget . Проверено 5 июля 2014 г.
  5. ^ Дэниел П. (07 ноября 2013 г.). «Экспериментальная среда выполнения Google ART в Android KitKat может обеспечить вдвое более быстрое выполнение приложений» . phonearena.com . Проверено 5 июля 2014 г.
  6. ^ Jump up to: Перейти обратно: а б Живые вопросы и ответы с Дэном Борнштейном, создателем Dalvik VM . ИнфоQ . 29 сентября 2015 г. – через YouTube.
  7. ^ Google I/O 2008 — Внутреннее устройство виртуальной машины Dalvik . Google . 4 июня 2008 г. - через YouTube.
  8. ^ Дэвис, Брайан; Битти, Эндрю; Кейси, Кевин; Грегг, Дэвид; Т. Уолдрон, Джон (8 июня 2003 г.). «Дело о виртуальных регистровых машинах» (PDF) . Ассоциация вычислительной техники . дои : 10.1145/858570.858575 . Архивировано из оригинала (PDF) 1 февраля 2024 года.
  9. ^ Бешицца, Роб (12 ноября 2007 г.). «Android SDK открыт для кода» . ПРОВОДНОЙ . Архивировано из оригинала 31 января 2024 года.
  10. ^ Борнштейн, Дэн (29 мая 2008 г.). «Презентация внутренних компонентов Dalvik VM» (PDF) . п. 22. Архивировано из оригинала (PDF) 16 апреля 2017 г. Проверено 16 августа 2010 г.
  11. ^ Роуз, Джон (31 мая 2008 г.). «с Android и Dalvik в Google I/O» . Архивировано из оригинала 4 июня 2008 г. Проверено 8 июня 2008 г.
  12. ^ Google (13 апреля 2009 г.). «Что такое Андроид?» . Архивировано из оригинала 27 июня 2009 г. Проверено 19 апреля 2009 г.
  13. ^ Бен Ченг; Билл Бузби (май 2010 г.). «JIT-компилятор для Dalvik VM Android» (PDF) . android-app-developer.co.uk . стр. 5–14. Архивировано из оригинала (PDF) 6 ноября 2015 г. Проверено 18 марта 2015 г.
  14. ^ Фил Никинсон (26 мая 2010 г.). «Разработчик Google Android объясняет больше о Dalvik и JIT во Froyo» . androidcentral.com . Архивировано из оригинала 14 июля 2014 г. Проверено 8 июля 2014 г.
  15. ^ «Nexus One работает под управлением Android 2.2 Froyo. Насколько он быстр по сравнению с версией 2.1? О, всего примерно на 450 % быстрее» . 13 мая 2010 г. Проверено 21 мая 2010 г.
  16. ^ Ши, Юнхэ; Грегг, Дэвид; Битти, Эндрю; Эртль, М. Антон (11 июня 2005 г.). «Разборка виртуальных машин: стек и регистры» (PDF) . Проверено 22 декабря 2009 г.
  17. ^ Вандетт, Боб (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.
  18. ^ Хён Сок О; Бом-Джун Ким; Хён-Гю Чой; Су-Мук Мун (2012). Материалы 10-го международного семинара по Java-технологиям для систем реального времени и встраиваемых систем — JTRES '12 . Ассоциация вычислительной техники . п. 115. дои : 10.1145/2388936.2388956 . ISBN  9781450316880 . S2CID   36316611 . Однако в режиме JITC Dakvik медленнее HotSpot более чем в 2,9 раза, а размер его генерируемого кода не меньше, чем у HotSpot из-за худшего качества кода и кода цепочки трассировки.
  19. ^ «Лучшие результаты AndEBench» . www.eembc.org . Проверено 23 марта 2014 г.
  20. ^ Батюк, Леонид; Шмидт, Обри-Деррик; Шмидт, Ганс-Гюнтер; Камтепе, Ахмет; Албайрак, Шахин (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.
  21. ^ «Загрузка дерева исходного кода — Android с открытым исходным кодом» . Android.git.kernel.org. Архивировано из оригинала 17 апреля 2009 г. Проверено 7 июня 2012 г.
  22. ^ Гарлинг, Калеб. «Эксперты Google и Oracle спорят из-за Java Mimic для Android» . Проводной .
  23. ^ Эд Ботт (8 сентября 2011 г.). «Настоящая история Java и Android, рассказанная Google» . ЗДНет . Проверено 27 ноября 2011 г. Определение реализации «чистой комнаты» заключается в том, что инженеры, пишущие код, не имеют прямого доступа к исходному материалу, защищенному авторским правом, включая код, спецификации и другую документацию. Как я отметил во вчерашнем посте, это проблема для Google, поскольку существуют веские доказательства того, что инженеры, работавшие над проектом, имели прямой доступ к материалам, защищенным авторским правом.
  24. ^ «Oracle подает в суд на Google из-за Java в устройствах Android» . digitaltrends.com. 13 августа 2010 г. Проверено 8 августа 2011 г.
  25. ^ Джеймс Николаи (12 августа 2010 г.). «Oracle подает в суд на Google из-за использования Java в Android» . Компьютерный мир . Проверено 13 августа 2010 г.
  26. ^ Марк Хэчман (13 августа 2010 г.). «Oracle подает в суд на Google из-за использования Java в Android» . Журнал ПК . Зифф Дэвис .
  27. ^ Джош Ловенсон (23 мая 2012 г.). «Жюри освобождает Google от нарушения патентов Oracle» . ЗДНет . Проверено 25 мая 2012 г.
  28. ^ Джо Маллин (31 мая 2012 г.). «Google выигрывает решающее решение по API, дело Oracle разгромлено» . Арс Техника . Проверено 1 июня 2012 г.
  29. ^ Николаи, Джеймс (20 июня 2012 г.). «Oracle соглашается возместить «нулевые» убытки по иску Google, апелляционная жалоба» . Архивировано из оригинала 1 апреля 2023 г. Проверено 23 июня 2012 г.
  30. ^ Адам Аутлер (16 мая 2012 г.). «Обновление пробной версии Oracle против Google» . Архивировано из оригинала 16 мая 2013 г. Проверено 18 января 2013 г. Основная часть утверждений Oracle основана на 9 строках кода, содержащихся в Java.Util.Arrays.rangeCheck(). Вот код, о котором идет речь:...

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

Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 0611d47821194910354e928ce5e1750a__1714754220
URL1:https://arc.ask3.ru/arc/aa/06/0a/0611d47821194910354e928ce5e1750a.html
Заголовок, (Title) документа по адресу, URL1:
Dalvik (software) - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)