Сборщик мусора в Dart использует алгоритм поколенческой сборки мусора (Generational Garbage Collection).
Ключевые особенности:
- Поколения (Generations): Объекты делятся на два поколения:
- Молодое поколение (Young Generation): Здесь создаются новые объекты. Сборка мусора в этом поколении происходит быстрее и чаще, так как большинство объектов умирает вскоре после создания.
- Старое поколение (Old Generation): Объекты, "выжившие" после нескольких циклов сборки мусора в молодом поколении, перемещаются сюда. Сборка мусора в старом поколении происходит реже, но занимает больше времени.
- Выжившие (Survivors): Объекты в молодом поколении, на которые ссылаются другие объекты, считаются "выжившими" и могут быть перемещены в старое поколение.
- Этапы сборки:
- Сборка в молодом поколении (Minor GC): Быстрая сборка, затрагивающая только объекты в молодом поколении.
- Сборка в старом поколении (Major GC): Более длительная сборка, проверяющая объекты в старом поколении.
- Преимущества поколенческой сборки:
- Оптимизация для короткоживущих объектов: Большая часть мусора быстро удаляется из молодого поколения.
- Сокращение времени пауз: Частые, но короткие паузы для сборки молодого поколения менее заметны, чем редкие, но долгие паузы для всей кучи.
- Сборщик мусора Dart VM:
- Использует гибридный подход, сочетающий копирование (copying collector) для молодого поколения и маркировку и смещение (mark-and-sweep/compact) для старого поколения.
- Копирующий сборщик в молодом поколении быстро перемещает живые объекты в другую область памяти, эффективно освобождая текущую.
- Маркировка и смещение в старом поколении находит живые объекты, а затем перемещает их, чтобы устранить фрагментацию памяти.
- Работает независимо от потоков пользовательского интерфейса, минимизируя блокировки.
dart