Ответ
Memory leak — это ситуация, когда приложение продолжает удерживать память, которая больше не нужна, вместо того чтобы освободить её для сборщика мусора (Garbage Collector). Это приводит к постепенному увеличению потребления памяти и может вызвать замедление или падение приложения.
Частые причины во фронтенде:
- Неудалённые слушатели событий (addEventListener без removeEventListener)
- Замыкания, сохраняющие ссылки на большие объекты
- Утечки в SPA (например, неочищенные подписки RxJS, интервалы)
Пример утечки:
const hugeArray = new Array(1000000).fill('data');
// Замыкание сохраняет ссылку на hugeArray
function createLeak() {
const localData = hugeArray;
return function() {
console.log(localData.length);
};
}
// leakedFunc продолжает держать ссылку на hugeArray
const leakedFunc = createLeak();
Как избегать:
- Используйте WeakMap/WeakSet для хранения временных данных
- Всегда очищайте таймеры (clearTimeout) и подписки (unsubscribe)
- В React используйте useEffect с cleanup-функциями