Основные отличия между Dalvik и ART заключаются в следующем:
-
Компиляция:
- Dalvik: Использует Just-In-Time (JIT) компиляцию. Bytecode компилируется в машинный код во время выполнения приложения.
- ART: Использует Ahead-Of-Time (AOT) компиляцию по умолчанию. Bytecode компилируется в нативный код при первой установке или обновлении приложения. В ART начиная с Android 7.0 (Nougat) также присутствует JIT-компиляция для оптимизации производительности во время выполнения сбора информации о "горячих" участках кода.
-
Производительность:
- Dalvik: JIT-компиляция приводит к задержкам во время выполнения, так как компиляция происходит "на лету".
- ART: AOT-компиляция обеспечивает более высокую производительность во время выполнения, так как большая часть компиляции выполняется заранее. Однако, установка и обновления приложений могут занимать больше времени из-за компиляции.
-
Энергопотребление:
- Dalvik: JIT-компиляция может потреблять больше энергии во время работы приложения из-за постоянной компиляции.
- ART: AOT-компиляция может быть более энергоэффективной во время работы приложения, поскольку большая часть компиляции завершена до запуска.
-
Использование памяти и дискового пространства:
- Dalvik: DVM-файлы (Dalvik Executable) меньше по размеру. Нативный код генерируется при выполнении.
- ART: ART использует OAT-файлы (Optimized Android Executable), которые содержат оптимизированный нативный код. Эти файлы занимают больше места на диске, но позволяют быстрее запускать приложения.
-
Сборка мусора (Garbage Collection):
- Dalvik: Менее эффективные алгоритмы сборки мусора, которые могли приводить к "подтормаживаниям" (hiccups) в работе приложений.
- ART: Улучшенная сборка мусора с алгоритмами, предназначенными для сокращения пауз, что приводит к более плавным анимациям и отзывчивости интерфейса.
-
Инструментарий и отладка:
- Dalvik: Отладка и профилирование могли быть сложнее из-за JIT-компиляци