> Как работает сборщик мусора в JavaScript (JavaScript)

Уровень: senior · Роль: frontend · Категория: Технические вопросы

Компании: Верме, ITFB, Сбер, Арго, SmartWay, ООО Снэп АйТи

Стек: JavaScript

> Пример ответа

Сборщик мусора (Garbage Collector, GC) в JavaScript автоматически освобождает память, которая больше не используется программой. Основной механизм - это алгоритм Mark-and-Sweep (пометить и очистить).

Как это работает:

  1. Корневые объекты - сборщик начинает с глобального объекта (window в браузере, global в Node.js), текущего стека вызовов и локальных переменных в функциях.

  2. Обход графа - GC рекурсивно обходит все ссылки от корней, помечая каждый достижимый объект как "живой".

  3. Очистка - все непомеченные объекты считаются недостижимыми и удаляются из памяти.

Важные нюансы:

  • Циклические ссылки - если два объекта ссылаются друг на друга, но недостижимы из корней, они всё равно будут удалены (старые браузеры с устаревшим алгоритмом reference counting могли их не очищать, но современные движки используют mark-and-sweep).

  • Поколенческая сборка (Generational GC) - в V8 (Chrome, Node.js) объекты делятся на "молодое" и "старое" поколения. Молодые объекты проверяются чаще, так как большинство из них быстро умирают.

  • Инкрементальная сборка - чтобы не блокировать выполнение кода, GC работает небольшими порциями, чередуя с выполнением JavaScript.

Пример, когда сборщик не срабатывает (утечка памяти):

JAVASCRIPT
function createLeak() {
const largeArray = new Array(1000000).fill('data');
// Если largeArray остаётся в глобальной области или замыкании - память не освободится
}

Для предотвращения утечек: обнуляйте ссылки (obj = null), избегайте случайных глобальных переменных, очищайте таймеры и слушатели событий.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью