Sobes.tech
Middle

Ինչպես է աշխատում հիշողությունը JavaScript-ում?

sobes.tech AI

Պատասխան AI-ից

JavaScript-ում հիշողությունը ավտոմատ կերպով կառավարվում է։ Այն բաժանվում է երկու հիմնական տարածքների՝

  • Heap (Հավաքածու): Այստեղ պահվում են օբյեկտները և ֆունկցիաները։ Հիշողությունը դինամիկ կերպով բաժանվում է այս օբյեկտների ստեղծման ժամանակ:
  • Stack (Ստեփանակ): Այստեղ պահվում են հիմնական արժեքները (ստրինգներ, թվեր, boolean, null, undefined, Symbol, BigInt) և հղումները heap-ի օբյեկտներին։ Ստեփանակը աշխատում է LIFO (Last-In, First-Out) սկզբունքով:

Երբ օբյեկտի հղումը այլևս չի օգտագործվում, garbage collector-ը ազատում է heap-ի հիշողությունը։ Գործառույթները կարող են տարբեր լինել, բայց հաճախ օգտագործվում է նշում և մաքառում (Mark and Sweep):

  1. Նշում: Garbage collector-ը սկանավորում է բոլոր հասանելի օբյեկտները ռուչից (գլոբալ փոփոխականներ, ընթացիկ ֆունկցիայի տեղական փոփոխականներ) և նշում է որպես "կենդանի":
  2. Մաքառում: Բոլոր նշակագրված չլինող օբյեկտները (չհասանելի ռուչից) համարվում են "մահ" և հեռացվում են հիշողությունից:

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 հղում է նույն օբյեկտին