Для чего нужен Garbage collector?
Производительность в JS
Garbage Collector нужен, чтобы автоматически освобождать память от объектов, которые больше не используются, избавляя разработчика от ручного управления памятью.
Зачем нужен
В языках без GC (C, C++) память освобождают вручную (free), что чревато ошибками: утечки (забыли освободить), обращение к освобождённой памяти. GC делает это автоматически:
let user = { name: 'Ann' };
user = null; // GC освободит память автоматическиКак работает
Освобождает объекты, до которых нельзя добраться от корней (глобальный объект, стек, замыкания) — принцип достижимости. Алгоритм Mark-and-Sweep:
- Mark — от корней помечаются достижимые объекты.
- Sweep — непомеченные удаляются.
Что даёт
- Безопасность — нет обращений к освобождённой памяти.
- Удобство — не нужно вручную управлять памятью.
- Меньше багов — автоматическая очистка.
Ограничения
- Не спасает от логических утечек: если код держит ненужные ссылки (забытые таймеры, обработчики, кеши), GC не соберёт объект.
- Паузы на сборку (минимизируются инкрементальностью).
Как помочь GC
- Очищать таймеры/обработчики.
- Обнулять ненужные ссылки.
WeakMap/WeakSetдля слабых ссылок.
Коротко для собеседования
Garbage Collector автоматически освобождает память от недостижимых объектов (принцип reachability, Mark-and-Sweep), избавляя от ручного управления памятью и связанных багов (утечки, обращение к освобождённому). Не спасает от логических утечек (забытые ссылки/таймеры) — их избегают очисткой и WeakMap/WeakSet.