Sobes.tech
Назад к вопросам
Senior
2

Что такое утечка памяти и как работает garbage collector в JavaScript?

Компании, где спрашивали
Bitrix

Ответ от нейросети

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 работает автоматически, но понимание его принципов помогает писать эффективный и безопасный код.