Что такое GarbageCollector?
Производительность в JS
Garbage Collector (сборщик мусора) — это механизм движка JavaScript, который автоматически освобождает память, занятую объектами, до которых больше нельзя добраться из программы.
Принцип достижимости
Объект «жив», если до него можно добраться от корней (roots): глобальный объект, переменные в стеке текущих вызовов, замыкания. Недостижимый объект — мусор.
let user = { name: 'Ann' };
user = null; // прежний объект недостижим → будет собранАлгоритм Mark-and-Sweep
Современные движки (V8) используют «пометить и убрать»:
- Mark — от корней помечаются все достижимые объекты.
- Sweep — непомеченные удаляются.
Дополнительно: поколенческая сборка (новые/старые объекты), инкрементальность (короткие паузы), компактизация.
Почему не подсчёт ссылок
Простой reference counting не справляется с циклическими ссылками; Mark-and-Sweep их корректно собирает, т. к. они недостижимы от корней.
Утечки памяти
- Забытые таймеры/обработчики.
- Незачищенные ссылки в замыканиях.
- Растущие глобальные кеши.
Для «слабых» ссылок, не мешающих сборке, — WeakMap/WeakSet.
Коротко для собеседования
Garbage Collector автоматически освобождает недостижимые объекты по принципу reachability от корней, используя Mark-and-Sweep (с поколениями и инкрементальностью). Корректно собирает циклы. Утечки — из-за забытых ссылок/таймеров; WeakMap/WeakSet их избегают.
Подробнее: learn.javascript.ru — Сборка мусора