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

Для чего нужен Garbage collector?

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

Garbage Collector нужен, чтобы автоматически освобождать память от объектов, которые больше не используются, избавляя разработчика от ручного управления памятью.

Зачем нужен

В языках без GC (C, C++) память освобождают вручную (free), что чревато ошибками: утечки (забыли освободить), обращение к освобождённой памяти. GC делает это автоматически:

let user = { name: 'Ann' };
user = null; // GC освободит память автоматически

Как работает

Освобождает объекты, до которых нельзя добраться от корней (глобальный объект, стек, замыкания) — принцип достижимости. Алгоритм Mark-and-Sweep:

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

Что даёт

  • Безопасность — нет обращений к освобождённой памяти.
  • Удобство — не нужно вручную управлять памятью.
  • Меньше багов — автоматическая очистка.

Ограничения

  • Не спасает от логических утечек: если код держит ненужные ссылки (забытые таймеры, обработчики, кеши), GC не соберёт объект.
  • Паузы на сборку (минимизируются инкрементальностью).

Как помочь GC

  • Очищать таймеры/обработчики.
  • Обнулять ненужные ссылки.
  • WeakMap/WeakSet для слабых ссылок.

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

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

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