Назад к вопросам
Middle
245
questionbank

В чем отличие между Dalvik Virtual Machine и ART (Android Runtime)?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

Основные отличия между Dalvik и ART заключаются в следующем:

  1. Компиляция:

    • Dalvik: Использует Just-In-Time (JIT) компиляцию. Bytecode компилируется в машинный код во время выполнения приложения.
    • ART: Использует Ahead-Of-Time (AOT) компиляцию по умолчанию. Bytecode компилируется в нативный код при первой установке или обновлении приложения. В ART начиная с Android 7.0 (Nougat) также присутствует JIT-компиляция для оптимизации производительности во время выполнения сбора информации о "горячих" участках кода.
  2. Производительность:

    • Dalvik: JIT-компиляция приводит к задержкам во время выполнения, так как компиляция происходит "на лету".
    • ART: AOT-компиляция обеспечивает более высокую производительность во время выполнения, так как большая часть компиляции выполняется заранее. Однако, установка и обновления приложений могут занимать больше времени из-за компиляции.
  3. Энергопотребление:

    • Dalvik: JIT-компиляция может потреблять больше энергии во время работы приложения из-за постоянной компиляции.
    • ART: AOT-компиляция может быть более энергоэффективной во время работы приложения, поскольку большая часть компиляции завершена до запуска.
  4. Использование памяти и дискового пространства:

    • Dalvik: DVM-файлы (Dalvik Executable) меньше по размеру. Нативный код генерируется при выполнении.
    • ART: ART использует OAT-файлы (Optimized Android Executable), которые содержат оптимизированный нативный код. Эти файлы занимают больше места на диске, но позволяют быстрее запускать приложения.
  5. Сборка мусора (Garbage Collection):

    • Dalvik: Менее эффективные алгоритмы сборки мусора, которые могли приводить к "подтормаживаниям" (hiccups) в работе приложений.
    • ART: Улучшенная сборка мусора с алгоритмами, предназначенными для сокращения пауз, что приводит к более плавным анимациям и отзывчивости интерфейса.
  6. Инструментарий и отладка:

    • Dalvik: Отладка и профилирование могли быть сложнее из-за JIT-компиляции.
    • ART: Улучшенная поддержка отладки и профилирования нативного кода.

Краткая таблица-сравнение:

Характеристика Dalvik Virtual Machine (DVM) ART (Android Runtime)
Тип компиляции JIT (Just-In-Time) AOT (Ahead-Of-Time) по умолчанию, JIT с Android 7.0
Производительность Ниже во время выполнения Выше во время выполнения
Время запуска Быстрее при первом запуске Медленнее при установке/обновлении, быстрее при запуске
Энергопотребление Может быть выше при работе Может быть ниже при работе
Использование диска Меньше Больше (из-за OAT-файлов)
Сборка мусора Менее эффективная Более эффективная
Поддержка Устарела (до Android 4.4) Текущая среда выполнения

ART пришел на смену Dalvik начиная с Android 5.0 (Lollipop) и является стандартной средой выполнения для современных версий Android. Пример кода для иллюстрации отличий в компиляции не применим, так как это низкоуровневые внутренние компоненты ОС, а не код приложения. Мы используем J言語を書き、その上でDalvikまたはARTが動きます。

// Пример простого Android приложения на языке Java/Kotlin,
// которое компилируется в Dalvik/ART bytecode (.dex файл).
// Сам код приложения вне зависимости от среды выполнения будет выглядеть одинаково.

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        TextView textView = findViewById(R.id.myTextView);
        textView.setText("Hello, ART!"); // Этот код выполняется Dalvik или ART
    }
}