Как называется самый популярный алгоритм сборки мусора?
Продвинутые темы
Самый популярный алгоритм сборки мусора — Mark-and-Sweep («пометить и убрать»). Он используется в большинстве JS-движков, включая V8.
Mark-and-Sweep
Основной алгоритм GC в JavaScript:
Две фазы
- Mark (пометка) — от корней (глобальный объект, стек, замыкания) GC обходит все ссылки и помечает достижимые объекты.
- Sweep (очистка) — проходит по памяти и удаляет непомеченные (недостижимые) объекты.
Корни → обход ссылок → пометка достижимых → удаление непомеченныхПочему популярен
- Собирает циклы — в отличие от reference counting, корректно удаляет объекты, ссылающиеся друг на друга (недостижимые от корней).
- Надёжен — основан на достижимости, не пропускает мусор.
- Основа для оптимизаций — на нём строятся поколенческий, инкрементальный, конкурентный подходы.
В V8 (Chrome, Node)
Расширенная реализация:
- Scavenge (minor GC) — быстрая сборка молодого поколения.
- Mark-Sweep-Compact (major GC) — Mark-and-Sweep + компактизация (уплотнение памяти) для старого поколения.
- Инкрементальная и конкурентная для коротких пауз.
Reference counting (для контраста)
Считает ссылки, удаляет при нуле — устарел из-за проблемы циклов.
Коротко для собеседования
Самый популярный алгоритм GC — Mark-and-Sweep («пометить и убрать»): помечает достижимые от корней объекты (Mark), удаляет непомеченные (Sweep). Популярен, потому что собирает циклы (в отличие от reference counting) и надёжен. В V8 — расширен: Scavenge (minor) + Mark-Sweep-Compact (major) с компактизацией, инкрементально.