Поскольку новая среда выполнения ART компилирует приложения AOT, мне было интересно, включает ли запуск приложения виртуальную машину или код выполняется непосредственно в системе. Мне не удалось извлечь эту информацию из статей в Интернете, поскольку некоторые упоминают виртуальную машину, а другие говорят о том, что приложения компилируются в файлы ELF (насколько мне известно, двоичный формат, используемый ядром Linux, предполагает, что приложения запускаются изначально).
Может ли кто-нибудь помочь мне в этом?
BPou
Краткая история: да, ART переводит приложения в код, родной для реальной архитектуры телефона, и поэтому приложения выполняются изначально без необходимости JIT-компилятора.
Долгая история: из соображений совместимости приложения по-прежнему объединяются в apks, несущие код Java, скомпилированный в файлы dex. Но вместо того, чтобы просто оптимизировать код .dex и выполнить его внутри Dalvik VM (DVM), код компилируется в собственный код. Это делается на устройстве с помощью инструмента под названием dex2oat , где файлы oat встроены в обычный формат файлов ELF.
На следующем рисунке показана разница между использованием DVM и ART:
( Википедия : Схема архитектуры Android Run Time, воссозданная на основе информации, опубликованной на сайте A Closer Look at Android RunTime (ART) в Android L. )
Повышение производительности связано с тем, что DVM использовала JIT-компиляцию каждый раз при запуске приложения, в то время как AOT-компиляция происходит только во время установки.
Ирфан Латиф
app_process
, что запускаетzygote
и разветвляет виртуальные машины дляsystem_server
всех приложений.пользователь3363866
Ирфан Латиф