جمع آوری زباله – انجمن DEV

وقتی چیزی دیگر مورد نیاز نباشد چه اتفاقی می افتد؟ چگونه موتور جاوا اسکریپت آن را کشف و پاک می کند؟
قابلیت دسترسی
مفهوم اصلی مدیریت حافظه در جاوا اسکریپت است reachability
.
یک مجموعه پایه از مقادیر ذاتا قابل دسترسی وجود دارد که به دلایل واضح نمی توان آنها را حذف کرد.
برای مثال:
- تابع در حال اجرا، متغیرها و پارامترهای محلی آن.
- سایر توابع در زنجیره فعلی تماس های تودرتو، متغیرها و پارامترهای محلی آنها.
- متغیرهای جهانی
These values are called roots.
هر مقدار دیگری در صورتی قابل دسترسی در نظر گرفته می شود که از ریشه توسط یک مرجع یا زنجیره ای از مراجع قابل دسترسی باشد. یک فرآیند پس زمینه در موتور جاوا اسکریپت وجود دارد که به آن زباله گرد می گویند. همه اشیاء را کنترل می کند و آنهایی را که غیرقابل دسترس شده اند حذف می کند.
بیایید شیرجه بزنیم و بفهمیم که چگونه کار می کند
مثال
// user has a reference to the object
let user = {
name: "John"
};
و اگر مقدار کاربر بازنویسی شود، مرجع از بین می رود:
حالا جان دست نیافتنی می شود. هیچ راهی برای دسترسی به آن وجود ندارد، اما اگر مرجع را از کاربر به مدیر کپی کنیم و مقدار را بازنویسی کنیم
سپس شی همچنان از طریق متغیر جهانی admin قابل دسترسی است.
علامت گذاری و جارو کردن
الگوریتم جمع آوری زباله “مارک و جارو” نامیده می شود.
و این مراحل به طور منظم انجام می شود:
-
زباله جمع کن ریشه می اندازد و آنها را علامت گذاری می کند (به یاد می آورد).
-
سپس همه مراجع را از آنها بازدید و “علامت گذاری” می کند.
- و به همین ترتیب تا زمانی که همه مراجع قابل دسترسی بازدید شوند.
- تمام اشیاء به جز موارد علامت گذاری شده حذف می شوند.
خلاصه
- متغیرهای سراسری ریشه در نظر گرفته می شوند، بنابراین هنگام اعلام یا ارجاع آنها به آنها توجه داشته باشید.
- مراجع خروجی مهم نیست. فقط موارد ورودی می توانند یک شی را قابل دسترس کنند.
میتوانید بیشتر بیاموزید و نمونههای پیچیدهتری را در آن بررسی کنید
اطلاعات جاوا اسکریپت