Memory Management-ը JavaScript-ում
Memory Management-ը JavaScript-ում (Garbage Collection)
JavaScript-ը ավտոմատ կերպով կառավարում է հիշողությունը։ Սա նշանակում է, որ մենք ծրագրավորողներով պարտավոր չենք ազատել RAM-ը, երբ տվյալներն այլևս պետք չեն։ Սակայն, հասկանալ, թե ինչպես է այս գործընթացը աշխատում, կօգնի քեզ գրել ավելի արդյունավետ և օպտիմալ կոդ։
Այս հոդվածում կսովորենք՝ ինչպես է JavaScript-ը կառավարում հիշողությունը, ինչ է "garbage collection"-ը, և ինչպես կարելի է խուսափել հիշողության արտահոսքերից (memory leaks)։
JavaScript-ում հիշողության կառավարումը ներառում է երեք փուլ՝
// Հիշողության ամրագրում
let user = {
name: "Anna",
age: 28
}; // Այստեղ օբյեկտը պահվում է heap-ում
// Օգտագործում
console.log(user.name); // "Anna"
// Երբ user-ը այլևս հասանելի չէ՝
user = null; // Ավտոմատ կանցնի "garbage collection"-ի
JavaScript-ը օգտագործում է ավտոմատ garbage collector, որը հետևում է՝ արդյոք տվյալները դեռ հասանելի են։ Եթե ոչ՝ դրանք ազատվում են։
Սա տեղի է ունենում հիմնականում հետևյալ սկզբունքով՝
Սա ամենատարածված garbage collection մեթոդն է։ Այն հետևյալ քայլերն ունի՝
// Օրինակ
function createUser() {
let user = {
name: "Aram"
};
return user;
}
let u = createUser(); // user-ը հասանելի է՝ GC չի ջնջի
u = null; // Այժմ GC կջնջի, եթե այլ հղումներ չկան
Այս մեթոդի առավելությունները.
Թեև garbage collector-ը օգտակար է, հնարավոր է չարաշահել ռեսուրսները և ունենալ memory leak։ Ահա որոշ տարածված սխալներ՝
// 1. Գլոբալ փոփոխականներ
function setName(name) {
globalName = name; // globalName-ը դառնում է global unintended variable
}
// 2. Մոռացված timeout կամ interval
setInterval(() => {
console.log("Still running...");
}, 1000); // Երբեք չի դադարում՝ եթե չփակես clearInterval-ով
// 3. Մոռացված event listeners
element.addEventListener('click', () => {
console.log("Clicked");
}); // Եթե never removed => memory leak
Ինչպես խուսափել.
let
, const
՝ նոր փոփոխականներ ստեղծելու համարJavaScript-ը ապահովում է ավտոմատ հիշողության կառավարում, սակայն մեր պատասխանատվությունն է գրենք կոդ, որն օգնում է այդ գործընթացին։ Հասկանալով՝ ինչպես է աշխատում garbage collection-ը, մենք կարող ենք խուսափել performance խնդիրներից և memory leak-ից։