Back to questions
Senior
1
Что такое утечка памяти и как работает garbage collector в JavaScript?
Companies where asked
Bitrix
Answer from AI
sobes.tech AI
Утечка памяти в JavaScript — это ситуация, когда память, которая больше не нужна программе, не освобождается, что приводит к постепенному увеличению потребления памяти и может вызвать замедление или сбой приложения.
Garbage Collector (GC) в JavaScript автоматически освобождает память, занятую объектами, которые больше не достижимы из корневых ссылок (например, глобальных переменных, стека вызовов).
Основной алгоритм — подсчёт достижимости (reachability):
- GC начинает с корневых объектов и помечает все объекты, до которых можно добраться по ссылкам.
- Все непомеченные объекты считаются недостижимыми и их память освобождается.
Пример утечки памяти:
function createClosure() {
let largeArray = new Array(1000000).fill('*');
return function() {
console.log(largeArray.length);
};
}
const closure = createClosure();
// largeArray не будет освобождён, пока closure существует
Здесь largeArray остаётся в памяти, потому что замыкание удерживает ссылку на неё.
Чтобы избежать утечек, нужно:
- Удалять ненужные ссылки (например, обнулять переменные).
- Избегать глобальных переменных.
- Быть осторожным с замыканиями и обработчиками событий.
Garbage Collector работает автоматически, но понимание его принципов помогает писать эффективный и безопасный код.