جستجو برای:
  • صفحه اصلی
  • لیست کامل دوره ها
  • مگامگ (محتوا رایگان)
    • Javascript
    • UX
    • HTML/CSS
    • UI
  • حساب کاربری شما
    • داشبورد
    • دوره های خریداری شده
    • ویرایش پروفایل کاربری
 
مگادمی
  • صفحه اصلی
  • لیست کامل دوره ها
  • مگامگ (محتوا رایگان)
    • Javascript
    • UX
    • HTML/CSS
    • UI
  • حساب کاربری شما
    • داشبورد
    • دوره های خریداری شده
    • ویرایش پروفایل کاربری
0
ورود / عضویت

مگادمیمگامگمقالاتJavascriptGarbage collection – مدیریت حافظه در جاوا اسکریپت

Garbage collection – مدیریت حافظه در جاوا اسکریپت

10 بهمن 1402
ارسال شده توسط فرهاد احمدی
Javascript
909 بازدید
Garbage collection

آنچه خواهید دید :

Toggle
  • Grabage collection در جاوا اسکریپت
    • الگوریتم های استفاده شده در Garbage collection
    • الگوریتم رفرنس شماری  (Reference-counting)
      • مثالی ساده از الگوریتم Reference-counting
    • الگوریتم نشان و گردش (Mark-and-sweep algorithm)
      • مثالی ساده از الگوریتم Mark-and-sweep
    • خلاصه مقاله
    • منابع

Grabage collection در جاوا اسکریپت

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

الگوریتمی است در engine جاوا اسکریپت که میاد و تمامی متغیر های قدیمی و بلا استفاده ای که قبلا وجود داشته را حذف میکند و دیگر لازم نیست که بصورت دستی اینکار را انجام دهیم.

درک مدیریت حافظه در جاوا اسکریپت حول مفهوم دسترس پذیری می چرخد. اشیایی که از شی عمومی یا دیگر اشیاء ریشه دار قابل دسترسی هستند، در دسترس در نظر گرفته می شوند. به این معنی که به طور فعال توسط برنامه مورد استفاده قرار می گیرند. اشیایی که از هیچ شی ریشه ای قابل دسترسی نیستند بلا استفاده در نظر گرفته می شوند.

 

الگوریتم های استفاده شده در Garbage collection

در جاوا اسکریپت، این مبحث توسط 2 الگوریتم حافظه را مدیریت میکند.

  1. الگوریتم رفرنس شماری  (Reference-counting)
  2. الگوریتم نشان و گردش (Mark-and-sweep algorithm)

الگوریتم رفرنس شماری  (Reference-counting)

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

مثالی ساده از الگوریتم Reference-counting

let programmer = {
   name: "farhad",
};

 

garbage collection

 

در این مثال متغیر programmer به شی  {“name : “farhad}اشاره دارد، پس رفرنسی به این شی داده شده و از حافظه پاک نمی شود. حال اگر بیایم و مقدار این متغیر را تغییر دهیم

 

let programmer = {
name : "farhad"
};
programmer = null

 

garbage collection

 

حال که مقدار متغیر programmer را تغییر دادیم، هیچ اشاره ایی به {“name : “farhad} نشده پس این یک ابجکت بلا استفاده است و هیچ رفرنسی به آن داده نشده است  و توسط این الگوریتم حذف می شود.

الگوریتم نشان و گردش (Mark-and-sweep algorithm)

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

مثالی ساده از الگوریتم Mark-and-sweep

garbage collection

اولین مرحله جمع آوری ریشه ها است، از شی عمومی شروع به پیمایش می کنیم و به تمامی شی هایی که قابل دسترس هستند رجوع می کنیم و آن ها را به خاطر می سپاریم. سپس برمی گردیم و آن ها را علامت گذاری می کنیم.

به وضوح می توان دسته ای غیر قابل دسترس را در سمت راست دید. در مرحله بعد تمامی شی هایی که علامت گذاری نشده اند را حذف می کنیم که دسته سمت راست جزء همین دسته هستند.

 

دانستن این مبحث به عنوان یک برنامه نویس بسیار اهمیت دارد، زیرا بعضی از ابزار ها این موضع را جدی تر گرفته و در صورت آشنا نبودن با این مبحث ممکن است که باگ هایی از منابع نا آشنا برای برنامه نویس بوجود آید که مشکل ساز باشد. در نتیجه می توان گفت که دانستن این موضوع برای برنامه نویس حرفه ای، مخصوصا برنامه نویس جاوا اسکریپت از اهمیت بالایی برخوردار است.

 

خلاصه مقاله

  • Garbage collection به صورت خودکار و پنهان انجام می‌شود.
  • شی ها تا زمانی که قابل دسترس باشند حذف نمی شوند.
  • garbage collection توسط 2 الگوریتم حافظه را مدیریت میکند.
    1. الگوریتم رفرنس شماری  (Reference-counting garbage collection )
    2. الگوریتم نشان و گردش (Mark-and-sweep algorithm)
  • وجود garbage collection می تواند عملکرد و بعضاً اشتباهات برنامه نویس ها که کد های بلا استفاده دارند را بهتر کند.

منابع

  • برای اینکه در این موضوع عمیق تر شوید پیشنهاد می کنم که به سایت javascript.info مراجعه کنید.
  • همانند همیشه wikipedia
  • مثل همیشه مقاله های medium

برای دسترسی به مطالب بیشتر راجب به جاوا اسکریپت می توانید به بخش مقالات جاوا اسکریپت در وبسایت مگادمی مراجعه کنید.

اشتراک گذاری:
برچسب ها: Garbage collectionJavascript
درباره فرهاد احمدی

فرهاد هستم از نوع طراح و برنامه نویسش.

نوشته های بیشتر از فرهاد احمدی

مطالب زیر را حتما مطالعه کنید

حرفه ای 1
استاندارد های فنی حرفه ای برای حوزه وب
سازمان فنی و حرفه‌ای یکی از معتبرترین مراکز ارائه‌دهنده مدارک حرفه‌ای در ایران هست. بیشتر...
Object in JavaScript
2 روش ساخت آبجکت (object) در جاوا اسکریپت
object چیست؟ آبجکت یک نوع داده کلید و مقدار (key-value) هست. در نظر بگیرید که...
array
آرایه (array) در جاوا اسکریپت و 4 روش تغییر عضو های آرایه
آرایه (array) چیست؟ بیاید به زبان ساده و یک مثال دنیای واقعی بهش نگاه کنیم....
string
رشته (string) چیست و 3 روش پیاده سازی آنها
رشته (string) چیست؟     string یک نوع داده در برنامه نویسی هست. این نوع...
variables
متغییر ها (variables) در جاوا اسکریپت و 3 نوع متغییر ها
متغییر (variable) چیست؟ متغیر (Variable) موضوعی هست که به یک مکان خاص در حافظه کامپیوتر...
جاوا اسکریپت
جاوا اسکریپت چیست و 3 روش استفاده از آن در HTML
جاوا اسکریپت (JavaScript) چیست؟ جاوا اسکریپت یک زبان برنامه نویسی اسکریپتی هست. مقالات زیادی راجب...

1 دیدگاه

به گفتگوی ما بپیوندید و دیدگاه خود را با ما در میان بگذارید.

  • میلاد واقف نژاد گفت:
    17 بهمن 1402 در 6:18 ب.ظ

    عالی بود

    پاسخ

دیدگاهتان را بنویسید لغو پاسخ

جستجو برای:
نوشته‌های تازه
  • استاندارد های فنی حرفه ای برای حوزه وب
  • 2 روش ساخت آبجکت (object) در جاوا اسکریپت
  • آرایه (array) در جاوا اسکریپت و 4 روش تغییر عضو های آرایه
  • عدد (number) در جاوا اسکریپت و 2 نوع اصلی و مهم اعداد
  • رشته (string) چیست و 3 روش پیاده سازی آنها
اطلاعات تماس
  • 02191030701
  • khateri.amirhossein@yahoo.com
فهرست سفارشی
  • صفحه اصلی
  • تماس با ما
  • حساب کاربری من
  • درباره ما
  • سبد خرید
  • لیست دوره های مگادمی

تمامی حقوق برای آکادمی آنلاین مگادمی محفوظ می باشد.
ورود ×
ورود با کد تایید
ارسال مجدد کد تایید(00:60)
حساب کاربری ندارید؟
عضویت

ارسال مجدد کد تایید (00:60)
بازگشت به صفحه ورود

ورود

رمز عبور را فراموش کرده اید؟

ارسال مجدد کد تایید (00:60)

هنوز عضو نشده اید؟ عضویت در سایت