Что такое Dalvik и ART?
| Dalvik | ART (Android Runtime) |
---|
Использовался | До Android 4.4 (по умолчанию) | С Android 5.0+ (Lollipop) |
Тип | Интерпретатор + JIT | AOT-компилятор + JIT (новый) |
Цель | Выполнять .dex -байткод | Тоже .dex , но быстрее и эффективнее |
Ключевые отличия
1. Компиляция: JIT vs AOT
| Dalvik | ART |
---|
JIT (Just-In-Time) | Только JIT | JIT, но в сочетании с AOT |
AOT (Ahead-Of-Time) | Нет | Да (компилирует .dex => .oat при установке) |
Результат:
- Dalvik: компилирует код во время выполнения
- ART: заранее компилирует в нативный код => работает быстрее
2. Скорость запуска и выполнения
| Dalvik | ART |
---|
Запуск | Быстрее (меньше apk) | Медленнее (т.к. AOT компиляция) |
Исполнение | Медленнее | Быстрее (уже native код) |
Под капотом ART:
.dex
=> .oat
(native)
.oat
хранится в /data/dalvik-cache/
- С Android 9+ —
dex2oat
стал частично динамическим (JIT+Profile Guided)
3. GC (Garbage Collector)
| Dalvik | ART |
---|
Типы | Stop-the-world | Concurrent GC, Generational GC, G1GC |
Оптимизация | Мало | Много (особенно с Android 8+) |
ART имеет более современный и эффективный GC, который:
- может собирать память параллельно
- не так сильно лагает UI
4. Отладка и профилирование
- ART поддерживает добавление профилей использования для JIT-компиляции
- Также поддерживает JVMTI (debug интерфейс как в JVM)
- Лучше интеграция с
Systrace
, Perfetto
, Profile Installer
и т.д.
Где хранятся исполняемые файлы?
Файл | Dalvik | ART |
---|
байткод | .dex внутри .apk | .dex внутри .apk |
компиляция | JIT-компиляция в рантайме | AOT-компиляция в .oat или .vdex |
директория | нет | /data/dalvik-cache/ и /system/framework/ |