Отличия ART от Dalvik

Что такое Dalvik и ART?

DalvikART (Android Runtime)
ИспользовалсяДо Android 4.4 (по умолчанию)С Android 5.0+ (Lollipop)
ТипИнтерпретатор + JITAOT-компилятор + JIT (новый)
ЦельВыполнять .dex-байткодТоже .dex, но быстрее и эффективнее

Ключевые отличия

1. Компиляция: JIT vs AOT

DalvikART
JIT (Just-In-Time)Только JITJIT, но в сочетании с AOT
AOT (Ahead-Of-Time)НетДа (компилирует .dex => .oat при установке)

Результат:

  • Dalvik: компилирует код во время выполнения
  • ART: заранее компилирует в нативный код => работает быстрее

2. Скорость запуска и выполнения

DalvikART
ЗапускБыстрее (меньше apk)Медленнее (т.к. AOT компиляция)
ИсполнениеМедленнееБыстрее (уже native код)

Под капотом ART:

  • .dex => .oat (native)
  • .oat хранится в /data/dalvik-cache/
  • С Android 9+ — dex2oat стал частично динамическим (JIT+Profile Guided)

3. GC (Garbage Collector)

DalvikART
ТипыStop-the-worldConcurrent GC, Generational GC, G1GC
ОптимизацияМалоМного (особенно с Android 8+)

ART имеет более современный и эффективный GC, который:

  • может собирать память параллельно
  • не так сильно лагает UI

4. Отладка и профилирование

  • ART поддерживает добавление профилей использования для JIT-компиляции
  • Также поддерживает JVMTI (debug интерфейс как в JVM)
  • Лучше интеграция с Systrace, Perfetto, Profile Installer и т.д.

Где хранятся исполняемые файлы?

ФайлDalvikART
байткод.dex внутри .apk.dex внутри .apk
компиляцияJIT-компиляция в рантаймеAOT-компиляция в .oat или .vdex
директориянет/data/dalvik-cache/ и /system/framework/

Опубликовано

в

от

Метки: