Hack Frontend Community

Что такое Garbage Collector в JavaScript?

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

Вы не управляете памятью вручную — за вас это делает JavaScript-движок (например, V8 в Chrome/Node.js).

Как работает сборщик мусора?

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

Основной принцип:

Объект считается "мусором", если на него больше нет ссылок.

Пример:

let user = { name: "Alice" };
user = null; // Теперь объект можно удалить из памяти

Алгоритмы, используемые в GC

Mark-and-Sweep (Пометка и зачистка)

Наиболее распространённый алгоритм:

  • Помечает все объекты, доступные через переменные (корневые объекты).
  • Все остальные объекты — удаляются, как "мусор".

В этом примере объект Cнедостижим и будет удалён.

. Reference Counting (Подсчёт ссылок)

Каждый объект хранит число, показывающее, сколько на него ссылаются. Если счётчик = 0, объект удаляется.

Недостаток: циклические ссылки не удаляются.

let a = {};
let b = {};
a.ref = b;
b.ref = a;

// Обе переменные — null, но объекты всё ещё ссылаются друг на друга
a = null;
b = null; // Потенциальная утечка памяти!

Как избежать утечек памяти?

  • Удаляйте неиспользуемые таймеры: clearInterval, clearTimeout
  • Очищайте подписки, обработчики событий
  • Обнуляйте большие объекты и DOM-ссылки: ref.current = null
  • Избегайте глобальных переменных
  • Используйте WeakMap, WeakSet — они не мешают сборке мусора

Признаки утечек памяти

  • Постоянный рост памяти при использовании
  • Задержки, фризы, лаги
  • Высокое потребление RAM в DevTools → вкладка Performance/Memory

Важно:

Сборка мусора в JavaScript не мгновенна — это процесс, который выполняется периодически. Поэтому освобождение памяти может происходить с задержкой.