Ali Khoshgoftar
Ali Khoshgoftar
خواندن ۱ دقیقه·۴ سال پیش

مدیریت حافظه در جاوا اسکریپت به زبان ساده

بروزرسانی 1401/1/21

در جاوا اسکریپت هم مثل هر زبان دیگه ای به هر متغیری که تعریف میشه مقداری حافظه اختصاص داده میشه. این حافظه به صورت اتوماتیک توسط Garbage collection مدیریت میشه.

مدیریت حافظه
مدیریت حافظه


در جاوا اسکریپت Garbage collection توسط دو الگوریتم حافظه رو مدیریت میکنه

  • الگوریتم رفرنس-شماری Reference-counting garbage collection
  • الگوریتم نشان-و-گردش Mark-and-sweep algorithm


الگوریتم Reference-counting چگونه کار میکند؟

Reference-counting garbage collection
Reference-counting garbage collection


الگوریتم Reference-counting متغیر هایی که هیچ رفرنسی به آن ها در حافظه نداره را پیدا و از حافظه پاک میکنه.


در مثال زیر پس از تغییر مقدار user ، دیگر به آبجکت {name:"Ali khoshgoftar"} هیچ رفرنسی داده نشده در نتیجه Garbage collection مقدار {name:"Ali khoshgoftar"} را از حافظه حذف میکند.

let user={name:&quotAli khoshgoftar&quot} user=null //Garbage collector deleting the {name:&quotAli khoshgoftar&quot}


الگوریتم Mark-and-sweep چگونه کار میکند؟

Mark-and-sweep garbage collection
Mark-and-sweep garbage collection


الگوریتم Mark-and-sweep هر شی ای که به آن دسترسی وجود نداشته باشد از حافظه پاک میکند. این الگوریتم از متغیر های عمومی شروع به پیمایش کرده و تمام اشیا مختلفی که به آنها دسترسی وجود دارد را پیدا میکند پس از آن هر شی ای که به آن اشاره ای نشده بود از حافظه پاک میکند.

در مثال زیر زمانی که makeFunc صدا زده شود متغیر counter تعریف شده و مقدار 1 به آن تخصیص داده میشود و پس از return کردن مقدار Garbage collection این متغیر را از حافظه حذف میکند. پس از صدا زده شدن مجدد این تابع ، مجدد متغیر counter تعریف، مقدار دهی و در آخر حذف میشود.

function makeFunc() { let counter = 1; return ++counter; } console.log(makeFunc()) // 2 console.log(makeFunc()) // 2 console.log(makeFunc()) // 2

اگر بخواهیم طبق این الگوریتم یک متغیر بسازیم که پس از اجرا توسط Garbage collection این مقدار پاک نشود باید از کلوژر استفاده کنیم که در مقاله کلوژر کلوژر که میگن چیه؟ به صورت کامل در موردش صحبت کردیم

جاوا اسکریپتjavascriptjsمدیریت حافظهgarbage collection
از سال 1393 به برنامه نویسی علاقه مند شدم. اینجا سعی میکنم هر مطلبی که برام جذابه بنویسم و با شما به اشتراک بذارم
شاید از این پست‌ها خوشتان بیاید