PassFront
  1. PassFront
  2. База знаний
  3. Производительность в JS

Что такое GarbageCollector?

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

Garbage Collector (сборщик мусора) — это механизм движка JavaScript, который автоматически освобождает память, занятую объектами, до которых больше нельзя добраться из программы.

Принцип достижимости

Объект «жив», если до него можно добраться от корней (roots): глобальный объект, переменные в стеке текущих вызовов, замыкания. Недостижимый объект — мусор.

let user = { name: 'Ann' };
user = null; // прежний объект недостижим → будет собран

Алгоритм Mark-and-Sweep

Современные движки (V8) используют «пометить и убрать»:

  1. Mark — от корней помечаются все достижимые объекты.
  2. Sweep — непомеченные удаляются.

Дополнительно: поколенческая сборка (новые/старые объекты), инкрементальность (короткие паузы), компактизация.

Почему не подсчёт ссылок

Простой reference counting не справляется с циклическими ссылками; Mark-and-Sweep их корректно собирает, т. к. они недостижимы от корней.

Утечки памяти

  • Забытые таймеры/обработчики.
  • Незачищенные ссылки в замыканиях.
  • Растущие глобальные кеши.

Для «слабых» ссылок, не мешающих сборке, — WeakMap/WeakSet.

Коротко для собеседования

Garbage Collector автоматически освобождает недостижимые объекты по принципу reachability от корней, используя Mark-and-Sweep (с поколениями и инкрементальностью). Корректно собирает циклы. Утечки — из-за забытых ссылок/таймеров; WeakMap/WeakSet их избегают.

Подробнее: learn.javascript.ru — Сборка мусора

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