Что такое Dart VM и как она работает в Flutter?

«Что такое Dart VM и как она работает в Flutter?» — вопрос из категории Dart Core, который задают на 29% собеседований Flutter Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Dart VM — это виртуальная машина, выполняющая Dart-код, но в контексте Flutter её роль эволюционировала. Из моего опыта работы с Flutter, важно понимать два режима:

1. Режим разработки (JIT - Just-In-Time):

// Этот код во время разработки компилируется JIT
void main() {
  print('Hot Reload работает благодаря JIT');
  // Изменения применяются без полной перекомпиляции
}

2. Релизный режим (AOT - Ahead-Of-Time):

  • Код компилируется в нативный ARM/х86 код
  • Исключается JIT-компилятор, уменьшается размер приложения
  • Увеличивается скорость запуска и выполнения

Архитектура выполнения в Flutter:

Ваш Dart код →
├── Разработка: Dart VM (JIT) → Быстрый цикл разработки
└── Релиз: AOT компиляция → Нативный машинный код

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

Hot Reload работает благодаря:

  • Dart VM сохраняет состояние приложения
  • Инкрементальная компиляция изменённых Dart-файлов
  • Быстрое обновление UI без перезапуска

Ограничения AOT в релизе:

// Это НЕ сработает в AOT-режиме:
dynamic code = "print('Hello')";
eval(code); // Динамическое выполнение кода запрещено

// Вместо этого используйте:
void execute(String command) {
  switch(command) {
    case 'print': print('Hello');
    // предопределённые команды
  }
}

Изоляты (Isolates) и Dart VM:

// Каждый изолят имеет свою кучу памяти и поток управления
void heavyComputation() async {
  await Isolate.run(() {
    // Вычисления в отдельном изоляте
    final result = calculatePi(1000000);
    print(result);
  });
}

Производительность:

  • Dart VM использует сборку мусора (generational GC)
  • AOT-компиляция даёт производительность близкую к нативному коду
  • В релизе Flutter-приложения не содержат Dart VM, только скомпилированный код

Для отладки использую --profile или --release флаги для тестирования AOT-поведения во время разработки.