Назад к вопросам
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):
- Маркировка: Сборщик мусора сканирует все достижимые из корневых узлов (глобальные переменные, локальные переменные текущей функции) объекты и помечает их как "живые".
- Очистка: Все непомеченные объекты (недостижимые из корневых узлов) считаются "мертвыми" и удаляются из памяти.
Сборщик мусора работает в фоновом режиме и автоматически. Проблемы с памятью, такие как утечки, возникают, когда объекты остаются достижимыми, хотя по логике программы они уже не используются.
Примитивные значения копируются по значению, в то время как объекты и массивы копируются по ссылке.
// Пример: примитив копируется по значению
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 ссылается на тот же объект