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

Что такое Android Runtime?

1.3 Junior🔥 142 комментариев
#JVM и память

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

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

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

Что такое Android Runtime (ART)?

Android Runtime (ART) — это среда выполнения приложений, используемая в операционной системе Android начиная с версии 5.0 (Lollipop), заменившая предыдущую среду Dalvik. ART отвечает за выполнение байт-кода приложений Android, преобразованного из исходного кода (написанного, например, на Java или Kotlin) в формат DEX (Dalvik Executable). Ключевая миссия ART — обеспечить высокую производительность, энергоэффективность и плавную работу приложений на устройствах с ограниченными ресурсами.

Эволюция: от Dalvik к ART

  • Dalvik (до Android 4.4): Использовал JIT-компиляцию (Just-In-Time), при которой байт-код компилировался в машинный код во время запуска приложения. Это приводило к задержкам при старте и повышенному энергопотреблению.
  • ART (с Android 5.0): Внедрил AOT-компиляцию (Ahead-Of-Time), при которой DEX-код компилируется в нативный машинный код заранее — при установке приложения. Это значительно ускоряет запуск и выполнение, хотя увеличивает время установки и занимает больше памяти.

Ключевые особенности и механизмы ART

1. AOT- и JIT-компиляция

Современные версии ART используют гибридный подход:

  • AOT-компиляция: Основной код компилируется при установке или обновлении системы (в фоновом режиме с использованием службы dex2oat). Это обеспечивает быстрый запуск.
  • JIT-компиляция (с Android 7.0 Nougat): Добавлен JIT-компилятор для динамической оптимизации "горячего" кода во время выполнения, что снижает начальные затраты на установку и позволяет адаптироваться к паттернам использования приложения.
  • Профилировщик: ART собирает профили выполнения кода, чтобы оптимизировать последующие компиляции, уделяя внимание часто используемым методам.

Пример процесса компиляции в ART (упрощённо):

# Преобразование DEX в нативный код через dex2oat
dex2oat --dex-file=app.dex --oat-file=app.oat --instruction-set=arm64

2. Управление памятью и сборка мусора

ART включает усовершенствованный сборщик мусора (Garbage Collector, GC), который:

  • Реализует generational garbage collection (разделение объектов на молодые и старые поколения).
  • Использует parallel GC для минимизации пауз в работе приложения.
  • Внедряет конкурентную маркировку (concurrent marking), что снижает задержки при сборке мусора.

3. Оптимизации производительности

  • Улучшенные инварианты и инлайнинг: ART агрессивно оптимизирует байт-код, уменьшая накладные расходы.
  • Поддержка 64-битных архитектур: Нативная компиляция для ARM, x86 и MIPS.
  • Управление ресурсами: Эффективное использование процессора и памяти, что критично для мобильных устройств.

4. Бэкенд для Kotlin и Java

ART является средой выполнения для Java Virtual Machine (JVM)-совместимого байт-кода, что позволяет запускать приложения на Java и Kotlin. Например, код на Kotlin компилируется в DEX, который затем обрабатывается ART:

// Пример кода на Kotlin
fun main() {
    println("Hello, ART!")
}

После компиляции в DEX, ART преобразует его в нативный код для выполнения.

Преимущества ART перед Dalvik

  • Быстродействие: Запуск приложений ускоряется до 2 раз благодаря AOT.
  • Энергоэффективность: Снижение нагрузки на CPU за счёт предварительной компиляции.
  • Улучшенная сборка мусора: Меньшие паузы и лучшее управление памятью.
  • Поддержка новых функций: Например, Project Mainline с Android 10, где ART обновляется через Google Play.

Пример влияния ART на разработку

Для разработчика ART означает:

  • Ускоренную отладку: Современные инструменты (например, Android Studio Profiler) интегрируются с ART для анализа производительности.
  • Оптимизацию кода: Понимание работы ART помогает писать эффективный код, избегая частых аллокаций объектов.
  • Совместимость: ART обеспечивает обратную совместимость с DEX-форматом, поэтому приложения, написанные для Dalvik, работают без изменений.
// Пример: Избегание ненужных аллокаций в цикле (оптимизация для ART)
public class OptimizedForART {
    public void processItems(List<String> items) {
        // Плохо: создание объекта в каждой итерации
        // for (int i = 0; i < items.size(); i++) {
        //     String result = new String(items.get(i)); // Лишняя аллокация
        // }
        
        // Хорошо: использование существующих объектов
        for (String item : items) {
            String result = item; // Без аллокации
        }
    }
}

Заключение

ART — это фундаментальный компонент Android, эволюционировавший из Dalvik, который обеспечивает высокую производительность, эффективное управление ресурсами и поддержку современных языков программирования. Его гибридная модель компиляции (AOT+JIT) и усовершенствованный сборщик мусора делают Android-приложения быстрее и отзывчивее, что напрямую влияет на пользовательский опыт. Для разработчиков понимание ART важно для написания оптимизированного кода и отладки производительности. С каждым обновлением Android ART продолжает улучшаться, включая новые оптимизации, такие как компактный сборщик мусора в Android 12, что подчёркивает его ключевую роль в экосистеме.

Что такое Android Runtime? | PrepBro