Dalvik (программное обеспечение) - Dalvik (software)
Дальвик прекращено виртуальная машина процесса (ВМ) в Операционная система Android который выполняет приложения, написанные для Android.[1] (Формат байт-кода Dalvik все еще используется в качестве формата распространения, но больше не во время выполнения в новых версиях Android.) Dalvik был неотъемлемой частью стека программного обеспечения Android в (теперь не поддерживается) Версии Android 4.4 «КитКат» и ранее, которые обычно использовались на мобильных устройствах, таких как мобильные телефоны и планшетные компьютеры и многое другое в некоторых устройствах, например умные телевизоры и носимые. Далвик программное обеспечение с открытым исходным кодом, первоначально написанный Дэном Борнштейном, который назвал его в честь рыбацкой деревни Дальвик в Эйяфьордур, Исландия.[2][3]
Программ для Android обычно пишутся на Ява и скомпилирован в байт-код для Виртуальная машина Java, который затем преобразуется в байт-код Dalvik и сохраняется в .dex
(Dalvik EXecutable) и .odex
(Оптимизированный Dalvik EXecutable) файлы; связанные термины одекс и де-одекс связаны с соответствующими преобразованиями байт-кода. Компактный формат исполняемого файла Dalvik разработан для систем, которые ограничены с точки зрения объем памяти и процессор скорость.
Преемником Dalvik является Android Runtime (ART), который использует те же файлы байт-кода и .dex (но не файлы .odex), с последовательностью, направленной на повышение производительности, прозрачное для конечные пользователи. Новая среда выполнения была впервые включена в Android 4.4 «KitKat» в качестве превью технологии,[4][5] и полностью заменил Dalvik в более поздних версиях; Android 5.0 «Леденец» - это первая версия, в которую включена только среда выполнения ART.
Архитектура
В отличие от Виртуальные машины Java, которые штабельные машины, Dalvik VM использует регистровая архитектура для этого требуется меньше, как правило, более сложных инструкций виртуальной машины. Программы Dalvik пишутся на Java с использованием Android интерфейс прикладного программирования (API), скомпилирован в байт-код Java и при необходимости преобразован в инструкции Dalvik.
Инструмент под названием dx
используется для преобразования Java .учебный класс файлы в формате .dex. Несколько классы включены в один файл .dex. Дубликат струны и другие константы, используемые в нескольких файлах классов, включаются в вывод .dex только один раз для экономии места. Ява байт-код также превращается в альтернативу Набор инструкций используется Dalvik VM. Несжатый файл .dex обычно на несколько процентов меньше по размеру, чем сжатый Архив Java (JAR), полученный из тех же файлов .class.[6]
Исполняемые файлы Dalvik можно снова изменить при установке на мобильное устройство. Чтобы получить дальше оптимизации, порядок байтов могут быть заменены на определенные данные, просто структуры данных и функция библиотеки может быть связаны в соответствии, и пустые объекты класса могут быть, например, замкнуты накоротко.
Dalvik оптимизирован для малых требований к памяти и имеет некоторые особенности, которые отличают его от других стандартных виртуальных машин:[7]
- Виртуальная машина была уменьшена, чтобы использовать меньше места.
- В постоянный бассейн был изменен для использования только 32-битный индексы для упрощения устный переводчик.
- Стандарт Байт-код Java выполняет 8 бит инструкции стека. Локальные переменные должны копироваться в стек операндов или из него отдельными инструкциями. Dalvik вместо этого использует собственный 16 бит набор инструкций, который работает непосредственно с локальными переменными. Локальная переменная обычно выбирается 4-битный поле «виртуальный регистр». Это снижает количество инструкций Dalvik и увеличивает скорость интерпретатора.
Согласно Google, конструкция Dalvik позволяет устройству эффективно запускать несколько экземпляров виртуальной машины.[8]
Android 2.2 «Froyo» привел JIT-компиляция на основе трассировки в Dalvik, оптимизируя выполнение приложений за счет постоянного профилирование приложения каждый раз, когда они запускаются и динамически составление часто выполняемые короткие сегменты своего байт-кода в собственный Машинный код. Хотя Дальвик интерпретирует остальная часть байт-кода приложения, собственное выполнение этих коротких сегментов байт-кода, называемых «трассировками», обеспечивает значительные улучшения производительности.[9][10][11]
Спектакль
Относительные достоинства штабельные машины против регистр подходы, основанные на подходах, являются предметом постоянных дискуссий.[12]
Как правило, стековые машины должны использовать инструкции загружать данные в стек и манипулировать этими данными, и, таким образом, требовать больше инструкций, чем регистровые машины для реализации того же код высокого уровня, но инструкции в регистровой машине должны кодировать регистры источника и назначения и, следовательно, имеют тенденцию быть больше. Это различие важно для интерпретаторов виртуальных машин, для которых код операции отправка имеет тенденцию быть дорогостоящей, наряду с другими факторами, аналогичными своевременная компиляция.
Испытания выполнены на ARMv7 устройств в 2010 г. Oracle (владелец технологии Java) со стандартными неграфическими тестами Java показал HotSpot ВМ из Встроенная Java SE быть в 2–3 раза быстрее, чем JIT -на основе Dalvik VM of Android 2.2 (первоначальная версия Android, включающая JIT-компилятор).[13] В 2012 году академические тесты подтвердили коэффициент 3 между HotSpot и Dalvik на той же плате Android, также отметив, что код Dalvik был не меньше Hotspot.[14]
Кроме того, по состоянию на март 2014 г.[Обновить], тесты, выполненные на устройстве Android, по-прежнему показывают коэффициент 100 между собственными приложениями и приложением Dalvik на том же устройстве Android.[15][оригинальное исследование? ][неправильный синтез? ] После запуска тестов с использованием раннего интерпретатора 2009 года оба Собственный интерфейс Java (JNI) и собственный код показали ускорение на порядок.[16]
Лицензирование и патенты
Dalvik публикуется на условиях Лицензия Apache 2.0.[17] Некоторые говорят, что Далвик чистая комната реализация, а не разработка поверх стандартной среды выполнения 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 Runtime
- Разработка программного обеспечения для Android
- Виртуализация приложений
- Сравнение виртуальных машин приложений
- Сравнение Java и Android API
- Декомпилятор JEB - декомпилятор Dalvik (DEX и APK)
- Виртуальная машина Dalvik Turbo - проприетарная альтернатива реализации Dalvik
Рекомендации
- ^ «Отладка сборки мусора ART». Получено 6 октября 2015.
Среда выполнения Dalvik больше не поддерживается и недоступна [в текущих версиях Android], и ее формат байтового кода теперь используется ART.
- ^ запись в журнале ссылка на источник названия
- ^ "Google Calling: Android, gPhone SDK". onlamp.com. Получено 2008-02-05.
- ^ Шон Бакли (06.11.2013). "'Эксперимент ART в Android KitKat увеличивает время автономной работы и ускоряет работу приложений ». Engadget. Получено 2014-07-05.
- ^ Дэниел П. (7 ноября 2013 г.). «Экспериментальная среда выполнения Google ART в Android KitKat может в два раза ускорить выполнение приложений». phonearena.com. Получено 2014-07-05.
- ^ Борнштейн, Дэн (29 мая 2008 г.). «Презентация Dalvik VM Internals» (PDF). п. 22. Получено 2010-08-16.
- ^ Роуз, Джон (31.05.2008). "с Android и Dalvik в Google I / O". Архивировано из оригинал на 2008-06-04. Получено 2008-06-08.
- ^ Google (13 апреля 2009 г.). "Что такое Android?". Получено 2009-04-19.
- ^ Бен Ченг; Билл Бузби (май 2010 г.). "JIT-компилятор для Android Dalvik VM" (PDF). android-app-developer.co.uk. С. 5–14. Архивировано из оригинал (PDF) на 2015-11-06. Получено 18 марта, 2015.
- ^ Фил Никинсон (26 мая 2010 г.). «Разработчик Google Android подробнее рассказывает о Dalvik и JIT во Froyo». androidcentral.com. Получено 8 июля, 2014.
- ^ «Nexus One работает под управлением Android 2.2 Froyo. Насколько быстро он работает по сравнению с 2.1? О, всего примерно на 450% быстрее». 2010-05-13. Получено 2010-05-21.
- ^ Ши, Юньхэ; Грегг, Дэвид; Битти, Эндрю; Эртл, М. Антон (11.06.2005). «Столкновение виртуальных машин: стек против регистров» (PDF). Получено 2009-12-22.
- ^ Вандетт, Боб (22 ноября 2010 г.). «Встроенная производительность Java SE по сравнению с Android 2.2». Корпорация Oracle. Архивировано из оригинал на 2011-06-28. Получено 2011-09-04.
Результаты показывают, что, хотя новый 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.
Однако в режиме JITC Dakvik более чем в 2,9 раза медленнее, чем HotSpot, а размер его сгенерированного кода не меньше, чем у HotSpot из-за худшего качества кода и кода с цепочкой трассировки.
- ^ «Лучшие результаты AndEBench». www.eembc.org. Получено 2014-03-23.
- ^ Батюк, Леонид; Шмидт, Обри-Деррик; Шмидт, Ганс-Гюнтер; Камтепе, Ахмет; Албайрак, Сахин (29 апреля 2009 г.). Разработка и тестирование собственных приложений Linux на Android. Конспект лекций Института компьютерных наук, социальной информатики и телекоммуникационной инженерии. 7. С. 381–392. Дои: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. Архивировано из оригинал на 2009-04-17. Получено 2012-06-07.
- ^ https://www.wired.com/2012/04/google-oracle-experts
- ^ Эд Ботт (8 сентября 2011 г.). «Настоящая история Java и Android, рассказанная Google». ZDNet. Получено 2011-11-27.
Определение «чистой комнаты» заключается в том, что инженеры, пишущие код, не имеют прямого доступа к исходным материалам, защищенным авторским правом, включая код, спецификации и другую документацию. Как я отмечал во вчерашнем сообщении, это проблема для Google, поскольку есть веские доказательства того, что инженеры, работающие над проектом, имели прямой доступ к материалам, защищенным авторским правом.
- ^ "Oracle предъявляет иск Google по поводу использования Java на устройствах Android". digitaltrends.com. 2010-08-13. Получено 2011-08-08.
- ^ Джеймс Никколай (12 августа 2010 г.). «Oracle подает в суд на Google из-за использования Java в Android». Computerworld. Получено 2010-08-13.
- ^ Марк Хачман (13 августа 2010 г.). "Oracle предъявляет иск Google по поводу использования Java в Android". Журнал ПК. Зифф Дэвис.
- ^ Джош Ловенсон (23 мая 2012 г.). «Жюри освобождает Google от нарушения патентов Oracle». ZDNet. Получено 2012-05-25.
- ^ Джо Маллин (31 мая 2012 г.). "Google выигрывает решающее решение по API, дело Oracle разгромлено". Ars Technica. Получено 2012-06-01.
- ^ Никколай, Джеймс (20 июня 2012 г.). «Oracle соглашается на« нулевой »ущерб в иске Google, апелляция на глаз». Получено 2012-06-23.
- ^ Адам Аутлер (16 мая 2012 г.). "Обновленная информация о пробной версии Oracle и Google". Получено 2013-01-18.
Основная часть заявлений Oracle основана на 9 строках кода, содержащихся в Java.Util.Arrays.rangeCheck (). Вот код, о котором идет речь: ...
внешняя ссылка
- Байт-код Dalvik - официальная Android-документация Набор инструкций
- Формат исполняемого файла Dex - официальная документация Android
- JIT-компилятор для Android Dalvik VM на YouTube, Google I / O 2010, Бен Ченг и Билл Бузби
- Dalvik VM Внутреннее устройство, Google I / O 2008, Дэн Борнштейн
- Вопрос на 800 миллионов долларов: в чем разница между товарным знаком и авторским правом?