Sobes.tech
Middle

Hogyan működik a memória JavaScriptben?

sobes.tech MI

Válasz az MI-től

A JavaScript memória automatikusan van kezelve. Két fő területre oszlik:

  • Heap (Heap): Itt tárolódnak az objektumok és függvények. A memória dinamikusan allokálódik az entitások létrehozásakor.
  • Stack (Verem): Itt tárolódnak primitív értékek (karakterláncok, számok, boolean, null, undefined, Symbol, BigInt) és a heapben lévő objektumokra mutató hivatkozások. A verem a LIFO (Last-In, First-Out) elv szerint működik.

Amikor egy objektum hivatkozása már nem használatos, a garbage collector (szemétgyűjtő) felszabadítja a heapben a memóriát. A szemétgyűjtő algoritmusok változhatnak, de gyakran alkalmazzák a Mark and Sweep módszert:

  1. Jelölés: A szemétgyűjtő átvizsgálja az összes elérhető objektumot a gyökércsomópontokból (globális változók, a jelenlegi függvény helyi változói), és "élő"ként jelöli meg őket.
  2. Tisztítás: Minden nem jelölt (nem elérhető a gyökércsomópontokból) objektum "halott" és törlésre kerül a memóriából.

A szemétgyűjtő háttérben és automatikusan működik. Memória problémák, például szivárgások akkor fordulnak elő, amikor az objektumok elérhetőek maradnak, bár a program logikája szerint már nem használják őket.

A primitív értékek másolódnak érték szerint, míg az objektumok és tömbök referencia szerint.

// Példa: primitív érték másolódik érték szerint
let a = 5;
let b = a;
 b = 10;
// az a továbbra is 5, a b 10 lesz

// Példa: objektum referencia szerint másolódik
let obj1 = { value: 10 };
let obj2 = obj1;
obj2.value = 20;
// az obj1.value mostantól szintén 20, mivel az obj2 ugyanarra az objektumra mutat