Sobes.tech
Middle

JavaScript-də yaddaş necə işləyir?

sobes.tech Süni İntellekt

AI-dan cavab

JavaScript-də yaddaş avtomatik idarə olunur. O, iki əsas sahəyə bölünür:

  • Heap (Yığım): Burada obyektlər və funksiyalar saxlanılır. Bu varlıqlar yaradıldıqda dinamik olaraq yaddaş ayrılır.
  • Stack (Yığım): Burada primitiv dəyərlər (sətirlər, ədədlər, boolean, null, undefined, Symbol, BigInt) və heap-dəki obyektlərə istinadlar saxlanılır. Yığım LIFO (Last-In, First-Out) prinsipi ilə işləyir.

Obyektə istinad artıq istifadə olunmursa, garbage collector (tullantı toplayıcı) heap-dəki yaddaşı azad edir. Tullantı toplanması alqoritmləri dəyişə bilər, amma çox vaxt Mark and Sweep (İşarələmə və Təmizləmə) istifadə olunur:

  1. İşarələmə: Garbage collector bütün əlçatan obyektləri (kök düyünlərdən, yəni qlobal dəyişənlər və cari funksiyanın yerli dəyişənlərindən) skan edir və onları "canlı" kimi işarələyir.
  2. Təmizləmə: İşarələnməyən obyektlər (kök düyünlərdən əlçatan olmayanlar) "ölü" sayılır və yaddaşdan silinir.

Garbage collector fon rejimində və avtomatik işləyir. Yaddaş problemləri, məsələn, sızmalar, obyektlər əlçatan qalanda, proqramın məntiqinə görə artıq istifadə olunmayan zaman baş verir.

Primitiv dəyərlər qiymət ilə kopyalanır, obyektlər və massivlər isə istinadla kopyalanır.

// Nümunə: primitiv dəyər qiymət ilə kopyalanır
let a = 5;
let b = a;
 b = 10;
// a hələ də 5, b isə 10

// Nümunə: obyekt istinadla kopyalanır
let obj1 = { value: 10 };
let obj2 = obj1;
obj2.value = 20;
// obj1.value indi də 20, çünki obj2 eyni obyektə istinad edir