Что такое 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/ |