← Назад к вопросам

В чем разница между Dalvik и ART?

2.0 Middle🔥 162 комментариев
#JVM и память#Производительность и оптимизация

Комментарии (2)

🐱
deepseek-v3.2PrepBro AI5 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Разница между Dalvik и ART: эволюция Android Runtime

Dalvik и ART — это две различные реализации среды выполнения (runtime) для приложений Android. ART пришел на смену Dalvik в Android 4.4 (KitKat) в качестве экспериментальной технологии и стал единственной средой с версии Android 5.0 (Lollipop). Их ключевое отличие заключается в принципе компиляции байт-кода в машинный код процессора.

Основные принципы работы

Dalvik: JIT-компиляция (Just-In-Time)

Dalvik использовал JIT-компиляцию. При запуске приложения байт-код (файлы .dex) компилировался в нативный код "на лету", прямо во время выполнения программы.

// Упрощенный принцип работы Dalvik JIT
1. Запуск приложения -> загрузка .dex байт-кода.
2. Интерпретация байт-кода (медленная начальная фаза).
3. При частом вызове методов -> JIT компилирует их в нативный код.
4. Сохранение скомпилированного кода в кэше для текущей сессии.

Недостатки Dalvik:

  • Медленный старт: необходимость компиляции во время выполнения замедляла запуск приложений.
  • Потребление памяти и батареи: процесс JIT-компиляции создавал нагрузку на CPU.
  • Отсутствие персистентного кэша: скомпилированный код терялся после перезагрузки устройства.

ART: AOT-компиляция (Ahead-Of-Time)

ART использует AOT-компиляцию. Компиляция байт-кода в нативный код происходит не во время запуска приложения, а заранее — при установке приложения на устройство.

// Упрощенный принцип работы ART AOT (изначальный)
1. Установка APK -> извлечение .dex файлов.
2. Запуск фонового процесса dex2oat.
3. Dex2oat компилирует весь байт-код в нативный код (.oat файлы).
4. При запуске приложения выполняется уже готовый нативный код.

Преимущества ART:

  • Быстрый запуск: приложение запускается сразу в скомпилированном виде.
  • Снижение нагрузки на CPU: отсутствие компиляции во время выполнения экономит заряд батареи.
  • Оптимизации: AOT-компилятор может проводить более глубокий статический анализ кода для оптимизаций.
  • Поддержка 64-битных архитектур: ART изначально создавался с поддержкой x86_64 и arm64.

Эволюция ART: гибридный подход (JIT + AOT)

Чистая AOT-компиляция имела свои минусы: долгая установка приложений, повышенный объем занимаемой памяти (нативный код больше байт-кода) и необходимость перекомпиляции при каждом обновлении системы. Поэтому начиная с Android 7.0 (Nougat) ART перешел на гибридную модель, сочетающую лучшие черты обеих технологий:

  1. Профилирующий JIT (в режиме runtime): При первом запуске приложение работает в режиме интерпретации с параллельным JIT. ART собирает профиль "горячих" методов, которые часто вызываются.
  2. Фоновая AOT-компиляция: На основе собранного профиля система фоново компилирует только самые критичные методы (а не все приложение), экономя место в памяти.
  3. Кэш скомпилированного кода сохраняется между перезагрузками.

Этот подход, дополненный в Android 10 технологией Cloud Profiles (загрузка оптимизированных профилей компиляции с серверов Google для ускорения "первого запуска" после установки), обеспечивает оптимальный баланс между скоростью установки, потреблением памяти и быстродействием.

Сводная таблица ключевых отличий

КритерийDalvikART (современный)
Тип компиляцииТолько JIT (Just-In-Time)Гибридный: JIT + AOT (Ahead-Of-Time)
Время компиляцииВо время выполнения приложенияВ основном при установке и фоново, частично — при запуске
Скорость запускаМедленнее (требуется компиляция)Значительно быстрее (используется предварительно скомпилированный код)
Установка/обновлениеБыстро (только распаковка)Быстрее, чем чистая AOT (компилируется по профилю)
Потребление памятиМеньше (байт-код компактнее)Больше (нативный код + профили), но оптимизировано
ЭнергопотреблениеВыше (нагрузка JIT при работе)Ниже (минимальная компиляция во время работы)
Поддержка 64-битНетДа

Итог: Переход от Dalvik к ART стал одним из самых значимых улучшений производительности Android за всю историю платформы. ART решает фундаментальные проблемы Dalvik за счет интеллектуального гибридного подхода к компиляции, что напрямую отражается на скорости работы приложений, времени автономной работы устройств и общей отзывчивости системы. Для разработчика понимание этой эволюции важно для анализа производительности и работы с инструментами профилирования, такими как Android Profiler.

В чем разница между Dalvik и ART? | PrepBro