Другое

Среда выполнения Art: ее проблемы, преимущества и недостатки

Lorem ipsum dolor

Среда выполнения Art была добавлена еще в Android 4.4 KitKat в качестве теста. Она начала работать рядом с виртуальной машиной Dalvik и включалась/выключалась вручную, чтобы пользователи могли почувствовать разницу между Art и Dalvik.

Главное отличие между ними — это подход в запуске приложений. То есть приложения на Андроиде хранятся в apk-файлах. Когда мы нажимаем на иконку приложения, то запускается именно этот вид файла. Такие файлы можно обрабатывать несколькими способами, среда выполнения Art и виртуальная машина Dalvik использовали совершенно разные подходы:

  • виртуальная машина Dalvik для компиляции приложений применяла подход JIT, что подразумевает компиляцию приложения непосредственно при его запуске, очень часто такой подход характеризуется весьма долгим временем ожидания;

  • среда выполнения Art для компиляции приложений использует подход АОТ, что подразумевает предварительную компиляцию приложений еще на стадии их инсталляции на устройство.

 

Среда выполнения Art

Среда выполнения Art несет в себе главное преимущество — это более ускоренный запуск приложений на самом устройстве за счет того, что приложение скомпилировано на стадии установки. Однако такой подход имеет и обратную сторону — на стадии установки приложений требуется намного больше времени, чем при Dalvik, плюс для самого приложения требуется больше места в хранилище устройства. Но в дальнейшем нагрузка на процессор и энергопотребление устройства значительно уменьшаются.

Изначально, когда среда выполнения Art была внедрена в Андроид в качестве теста, пользователи активно сравнивали между собой два подхода для запуска приложений Art и Dalvik на производительность, энергопотребление, скорость загрузки и установки приложений и т. д. В разных видах тестирования разные подходы показывали лучшие результаты. То есть в глобальном смысле обе эти виртуальные машины были на равных позициях, поэтому смотреть только в сторону Art или Dalvik не несло в себе смысла. Например, если у пользователя было устройство с ограниченным хранилищем, но он пользовался большим количеством приложений, то ему сподручней было использовать Dalvik, так как при таком подходе приложения занимали меньше места на устройстве. Если ограничений с памятью не было, то можно было применять Art и наслаждаться более быстрым запуском и работой приложений. Но это было на Android 4.4, на которой еще можно было выбирать среду выполнения.

На всех версиях Андроида, которые были ниже 4.4, стояла виртуальная машина Dalvik. А начиная с Android 5.0, среда выполнения Art полностью вытеснила с устройств Dalvik.

 

Сравниваем Dalvik и Art

Виртуальная машина Dalvik несла в себе следующие особенности:

  • использование JIT-подхода для компиляции приложений;

  • при компиляции компилировался не весь код, а лишь тот, который был необходим для работы приложения, а весь остальной код при необходимости компилировался динамически;

  • само устройство быстро загружалось, потому что не было необходимости сразу загружать кэш приложений;

  • программы, работающие на Dalvik, требуют намного меньше оперативной памяти, чем программы, работающие на Art;

  • эта виртуальная машина больше расходовала батарею за счет большей нагрузки процессора устройства.

Среда выполнения Art несет в себе следующие особенности:

  • применяет АОТ-подход при компиляции приложений, что ускоряет их запуск и работу;

  • устройства загружаются дольше за счет того, что должен загрузится кэш всех установленных приложений;

  • такой подход уменьшает нагрузку на батарею и процессор устройства;

  • требует большей памяти хранилища самого устройства из-за того, что приложения при их инсталляции сразу компилируются и занимают много места.

Но главным отличием Art от Dalvik считается отказ от JIT и использование АОТ. Однако так было до Android 7.0. Потому что в этой версии Андроида было решено возродить JIT, что и было сделано.

 

Современная среда выполнения Art — это AOT и JIT вместе

Современные версии Android используют среду выполнения Art, в которой сочетаются два казавшихся несовместимыми подхода для компиляции приложений: JIT и AOT. Вроде бы изначально разработчики бежали от «долгого» JIT, но со временем пришло понимание, что этот подход по-своему хорош, поэтому его внедрили в Art.

JIT не применяется как основной способ компилирования приложений, а всего лишь как дополнительный инструмент, который «подключается» на определенных этапах. Например, изначально компиляция приложений запускается на JIT, а в это время АОТ лишь «наблюдает» за ходом работы. АОТ замечает, какие участки кода приложения выполняются чаще, и берет их компиляцию на себя во время бездействия смартфона. Таким образом, в следующий раз при запуске приложения и «этих» участков кода в работу вступит AOT.

Такая совместная реализация принесла свои особенности, например:

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

  • существенно экономится оперативная и постоянная память, то есть не нужно компилировать все приложение при его установке, но и не нужно постоянно динамически компилировать все приложение в процессе работы, потому что компилируется и остается скомпилированной только та часть приложения, которой пользуется пользователь устройства;

  • ускорена первая загрузка операционной системы приложений на устройство, потому что не применяется «чистый» АОТ-подход.

 

Заключение

Среда выполнения Art плотно занимала свои позиции в Андроидах версий 5.0-7.0 и показала свои преимущества. Однако старый JIT-подход не собирался сдаваться, поэтому «вернулся» в Андроид 7.0, создав отличный тандем JIT+AOT, который работает на современных версиях Android.

Схожие статьи

Windows 10 creators update: что это за обновление и нужно ли его устанавливать?
Другое

Windows 10 creators update: что это за обновление и нужно ли его устанавливать?

Основы системного администрирования: что нужно знать сисадмину?
Другое

Основы системного администрирования: что нужно знать сисадмину?

Алгоритм в программировании: определение, виды и применение
Другое

Алгоритм в программировании: определение, виды и применение

Самые распространенные типы ошибок в программировании среди новичков
Другое

Самые распространенные типы ошибок в программировании среди новичков