> Как устроен garbage collector (JavaScript)
Уровень: middle · Роль: frontend · Язык: JavaScript · Категория: Технические вопросы
Компании: ЭНИРАН
Стек: Node.js, JavaScript
> Пример ответа
В JavaScript (и Node.js) сборщик мусора (GC) автоматически освобождает память, которая больше не используется программой. Основной механизм - это трассировка (tracing), а не подсчёт ссылок (как в некоторых старых браузерах). В V8 (движок Node.js) GC работает в несколько этапов:
- Молодое поколение (Young Generation) - для короткоживущих объектов. Используется алгоритм Scavenge: память делится на две полуобласти (from-space и to-space). При заполнении from-space живые объекты копируются в to-space, а from-space очищается. Это быстро, но требует паузы.
- Старое поколение (Old Generation) - для долгоживущих объектов, которые пережили несколько циклов молодого поколения. Здесь применяется Mark-Sweep-Compact:
- Mark - обход корневых ссылок (глобальные объекты, стек, замыкания) и пометка всех достижимых объектов.
- Sweep - удаление непомеченных объектов.
- Compact - уплотнение памяти для уменьшения фрагментации (опционально, при необходимости).
- Инкрементальный сбор - V8 разбивает работу на маленькие шаги, чтобы не блокировать основной поток надолго (важно для интерактивных приложений).
- Параллельный и конкурентный сбор - в современных версиях V8 часть работы (например, пометка) выполняется в фоновых потоках, что снижает задержки.
Особенности для Node.js: GC может вызывать паузы (stop-the-world), что критично для высоконагруженных серверов. Для минимизации влияния используют:
- Управление памятью вручную (например, пулы объектов).
- Избегание утечек (глобальные переменные, забытые таймеры, замыкания).
- Настройку флагов V8 (
--max-old-space-size,--optimize-for-size).
> Похожие задачи по JavaScript
С какими транспортными протоколами и технологиями вы работали (брокеры сообщений, вебсокеты, вебхуки)
Что сработает раньше: callback или promise
Для чего нужен setImmediate() в JavaScript и как он работает
Как обеспечить атомарность операций при увеличении счетчика запросов в Redis
> Похожие задачи по frontend
С какими транспортными протоколами и технологиями вы работали (брокеры сообщений, вебсокеты, вебхуки)
Что сработает раньше: callback или promise
Для чего нужен setImmediate() в JavaScript и как он работает
Как происходит шифрование в HTTPS
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью