Проверяет понимание того, как работает сборка мусора в JavaScript и можно ли управлять ею вручную из кода.
JavaScript использует автоматическое управление памятью: разработчик не освобождает объекты вручную, этим занимается сборщик мусора (Garbage Collector). Он определяет, какие объекты больше недостижимы из корневых ссылок, и освобождает занимаемую ими память. Движки применяют разные стратегии: mark-and-sweep, generational GC, инкрементальную и параллельную сборку.
Спецификация ECMAScript не описывает сборку мусора как часть языка, поэтому в стандарте нет функции вида gc(). Движки намеренно не дают такого API: принудительный запуск ломает эвристики, вызывает паузы и ухудшает производительность. Вместо этого движок сам решает, когда запускать сборку, ориентируясь на размер кучи, скорость аллокаций и другие метрики.
В Node.js есть исключение: если запустить процесс с флагом --expose-gc, появится глобальная функция global.gc(). Она полезна для тестов, бенчмарков и отладки утечек, но в продакшене её использовать не стоит.
// запуск: node --expose-gc app.js
if (global.gc) {
global.gc(); // принудительная сборка
console.log('GC выполнен');
} else {
console.log('Запустите с --expose-gc');
}
В браузере прямого способа нет, но есть косвенные инструменты. Через DevTools (вкладка Memory) можно вручную инициировать сборку мусора кнопкой с иконкой мусорного бака. Также существуют WeakRef и FinalizationRegistry, которые позволяют наблюдать за жизненным циклом объектов, но не управлять сборкой напрямую.
const registry = new FinalizationRegistry((held) => {
console.log('Объект собран:', held);
});
let obj = { data: 'x' };
registry.register(obj, 'obj');
obj = null; // теперь объект может быть собран
Обычно принудительный запуск GC не нужен: если код корректно освобождает ссылки, движок сам справится. Принудительный вызов оправдан только в тестах, профилировании или при отладке утечек памяти в Node.js.
Итог: применять global.gc() стоит только в отладочных сценариях Node.js с флагом --expose-gc; в продакшене полагайтесь на автоматическую сборку и следите за утечками через профилировщики.
Уровень
Рейтинг:
3
Сложность:
4
Навыки
JavaScript
Node.js
Ключевые слова
Подпишись на React Developer в телеграм
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию