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

Как работает Android Runtime?

3.0 Senior🔥 151 комментариев
#Android компоненты#JVM и память

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

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

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

Как работает Android Runtime (ART)

Android Runtime (ART) — это среда выполнения приложений, которая заменила Dalvik Virtual Machine (DVM) начиная с Android 5.0 Lollipop. ART выполняет трансляцию байт-кода приложений в машинный код во время установки или запуска, обеспечивая более высокую производительность по сравнению с интерпретацией.

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

  • AOT-компиляция (Ahead-Of-Time): ART компилирует байт-код в нативный код при установке приложения, тогда как Dalvik использовал JIT-компиляцию (Just-In-Time) во время выполнения.
  • Улучшенная производительность: Нативный код выполняется быстрее, что ускоряет запуск приложений и уменьшает задержки.
  • Экономия заряда батареи: Устранение необходимости в постоянной JIT-компиляции снижает энергопотребление.
  • Оптимизация памяти: ART использует более эффективные алгоритмы управления памятью, включая улучшенный сборщик мусора.

Принцип работы ART

  1. Установка приложения: При установке APK-файла ART запускает dex2oat — утилиту, которая компилирует байт-код из DEX-файлов в нативный код (ELF-формат).

    dex2oat --dex-file=app.dex --oat-file=app.oat --instruction-set=arm64
    
  2. Загрузка и выполнение: Скомпилированный нативный код хранится в отдельном файле (обычно с расширением .oat или .art). При запуске приложения ART загружает этот код напрямую в память, минуя стадию интерпретации.

  3. Сборка мусора (Garbage Collection): ART использует несколько сборщиков мусора, включая:

    • Concurrent GC: Работает параллельно с выполнением кода, минимизируя паузы.
    • Generational GC: Разделяет объекты по "поколениям" (молодые и старые), что ускоряет очистку памяти.

    Пример управления памятью в коде:

    class Example {
        fun createObjects() {
            val shortLived = ShortLivedObject() // Быстро удаляется молодым GC
            val longLived = LongLivedObject()   // Существует дольше, обрабатывается старым GC
        }
    }
    

Эволюция ART: от AOT к гибридной компиляции

С Android 7.0 Nougat ART перешёл на гибридную модель компиляции, сочетающую AOT и JIT:

  • Профилируемая JIT-компиляция: При первом запуске части кода компилируются JIT, и ART собирает "профиль" горячих методов.
  • Фоновая AOT-компиляция: При простое устройства ART компилирует часто используемые методы в нативный код для последующих запусков.
  • Хранение профилей: Профили оптимизации сохраняются между обновлениями приложения, ускоряя его работу.

Оптимизации ART

  1. Улучшенная инлайнизация (Inlining): Часто вызываемые методы встраиваются в код вызывающей стороны.
  2. Удаление мёртвого кода (Dead Code Elimination): Исключает неиспользуемые фрагменты байт-кода.
  3. Оптимизация циклов (Loop Optimization): Ускорение итераций за счёт развёртывания циклов.

Практическое влияние на разработку

  • Более быстрый запуск приложений: За счёт предварительной компиляции уменьшается время инициализации.
  • Улучшенная отзывчивость: Нативный код выполняется с минимальными задержками.
  • Особенности отладки: Разработчикам важно учитывать, что AOT-компиляция может маскировать некоторые ошибки, проявляющиеся только при JIT.

Пример структуры кода, оптимизируемого ART

public class Calculator {
    // Часто вызываемый метод может быть инлайнизирован ART
    public int add(int a, int b) {
        return a + b;
    }
    
    public void calculate() {
        int result = 0;
        // Цикл может быть оптимизирован
        for (int i = 0; i < 1000; i++) {
            result = add(result, i);
        }
    }
}

Заключение

ART — это высокооптимизированная среда выполнения, которая эволюционировала от чистой AOT-компиляции до интеллектуальной гибридной модели. Она обеспечивает баланс между производительностью, потреблением памяти и энергоэффективностью, что критически важно для мобильных устройств. Понимание работы ART помогает разработчикам писать более эффективный код и оптимизировать свои приложения для современных версий Android.

Как работает Android Runtime? | PrepBro