Сборщик мусора в Dart основан на алгоритме Generational Garbage Collection.
Особенности:
- Generational: Объекты делятся на "молодых" (new space) и "старых" (old space). Большинство объектов живут недолго, поэтому сборка "молодых" происходит чаще и быстрее.
- Two-Finger Algorithm: Используется для сборки "молодых" объектов. Два указателя проходят по живому графу объектов, перемещая живые объекты в "старое" поколение.
- Mark-Sweep: Применяется для сборки "старых" объектов. Сначала помечаются живые объекты, затем удаляются все непомеченные.
- Stop-the-World: Сборка мусора приостанавливает выполнение программы. Однако Generational подход минимизирует длительность этих пауз за счет частой и быстрой сборки "молодого" поколения.
- Compacting (поколение old space): После Mark-Sweep фазы, сборщик может компактировать "старое" поколение, уменьшая фрагментацию памяти.
- No destructors: В Dart нет деструкторов в традиционном смысле. Освобождение ресурсов происходит автоматически сборщиком мусора.
Основное преимущество Generational GC в Dart — высокая производительность за счет оптимизации для случая, когда большинство выделенных объектов становятся недоступными быстро.