Назад к вопросам
Middle
172
questionbank

Как работает память в JavaScript?

Sobes Copilot

Получайте ответы в реальном времени

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

sobes.tech AI

Память в JavaScript управляется автоматически. Она делится на две основные области:

  • Куча (Heap): Здесь хранятся объекты и функции. Память распределяется динамически при создании этих сущностей.
  • Стек (Stack): Здесь хранятся примитивные значения (строки, числа, булевы, null, undefined, Symbol, BigInt) и ссылки на объекты в куче. Стек работает по принципу LIFO (Last-In, First-Out).

Когда ссылка на объект больше не используется, сборщик мусора (Garbage Collector) освобождает память в куче. Алгоритмы сборки мусора могут варьироваться, но часто применяются маркировка и очистка (Mark and Sweep):

  1. Маркировка: Сборщик мусора сканирует все достижимые из корневых узлов (глобальные переменные, локальные переменные текущей функции) объекты и помечает их как "живые".
  2. Очистка: Все непомеченные объекты (недостижимые из корневых узлов) считаются "мертвыми" и удаляются из памяти.

Сборщик мусора работает в фоновом режиме и автоматически. Проблемы с памятью, такие как утечки, возникают, когда объекты остаются достижимыми, хотя по логике программы они уже не используются.

Примитивные значения копируются по значению, в то время как объекты и массивы копируются по ссылке.

// Пример: примитив копируется по значению
let a = 5;
let b = a;
b = 10;
// a остается 5, b становится 10

// Пример: объект копируется по ссылке
let obj1 = { value: 10 };
let obj2 = obj1;
obj2.value = 20;
// obj1.value теперь тоже 20, так как obj2 ссылается на тот же объект