Что такое Memory Leak

Ответ

Memory leak — это ситуация, когда приложение продолжает удерживать память, которая больше не нужна, вместо того чтобы освободить её для сборщика мусора (Garbage Collector). Это приводит к постепенному увеличению потребления памяти и может вызвать замедление или падение приложения.

Частые причины во фронтенде:

  1. Неудалённые слушатели событий (addEventListener без removeEventListener)
  2. Замыкания, сохраняющие ссылки на большие объекты
  3. Утечки в 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-функциями