Middle
Как работи паметта в JavaScript?
sobes.tech AI
Отговор от AI
Паметта в JavaScript се управлява автоматично. Тя е разделена на две основни области:
- Heap (Куча): Тук се съхраняват обекти и функции. Паметта се разпределя динамично при създаването на тези същности.
- Stack (Стек): Тук се съхраняват примитивни стойности (низове, числа, булеви, null, undefined, Symbol, BigInt) и препратки към обекти в кучата. Стекът работи по принципа LIFO (Last-In, First-Out).
Когато препратката към обект вече не се използва, garbage collector (събирач на отпадъци) освобождава паметта в кучата. Алгоритмите за събиране на отпадъци могат да варират, но често се използват маркиране и почистване (Mark and Sweep):
- Маркиране: Garbage collector сканира всички достижими обекти от кореновите възли (глобални променливи, локални променливи на текущата функция) и ги маркира като "живи".
- Почистване: Всички непомаркирани обекти (недостъпни от кореновите възли) се считат за "мъртви" и се премахват от паметта.
Garbage collector работи на заден план и автоматично. Проблеми с паметта, като течове, възникват, когато обектите остават достижими, въпреки че по логиката на програмата вече не се използват.
Примитивните стойности се копират по стойност, докато обектите и масивите се копират по препратка.
// Пример: примитивна стойност се копира по стойност
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 се отнася към същия обект