PassFront
  1. PassFront
  2. База знаний
  3. Продвинутые темы

Как называется самый популярный алгоритм сборки мусора?

Продвинутые темы

Самый популярный алгоритм сборки мусора — Mark-and-Sweep («пометить и убрать»). Он используется в большинстве JS-движков, включая V8.

Mark-and-Sweep

Основной алгоритм GC в JavaScript:

Две фазы

  1. Mark (пометка) — от корней (глобальный объект, стек, замыкания) GC обходит все ссылки и помечает достижимые объекты.
  2. 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) с компактизацией, инкрементально.

Другие вопросы раздела