ریبوار حسین پوری
ریبوار حسین پوری
خواندن ۳ دقیقه·۵ سال پیش

آشنایی با Garbage Collector در سی شارپ و چگونگی کارکرد آن، قسمت دوم

همانطور که در قسمت قبل توضیح دادم Garbage Collector ابزاریست! که توسط CLR برای آزاد سازی حافظه بلا استفاده اشیاء بکار گرفته میشود و ما را از انجام اینکار بصورت دستی بی نیاز میکند!

هنگامی که یک شی(Reference Type) در سی شارپ ساخته میشود ، قسمتی از حافظه بنام Heap به آن اختصاص پیدا میکند ، مدیریت Heap تماما توسط CLR انجام میشود(اختصاص حافظه و باز پس گیری آن). صحبت از حافظه که میشود همتراز محدود بودن آن است و با توجه به این محدودیت ، بایستی اشیائی که بلا استفاده هستند از حافظه پاک شده و CLR برای اشیاء جدید حافظه اختصاص دهد.

Heap Generation

حافظه Heap به سه گروه بنام Generation 0,1,2 تقسیم میشود، CLR با استفاده از GC با این سه گروه برخورد میکند و آنها را مدیریت میکند.

Generation 0 مکانیست که تمامی آشیاء جدید در آن نگه داری میشوند و به محض ساختن یک شی جدید درون این بخش قرار میگیرد و بعنوان اشیاء با طول عمر کوتاه شناخته میشوند

اما Generation 1 مکانیست شبیه بافر برای اشیائی که طول عمرشان کوتاه است با اشیائی که طول عمر بالاتری دارند.

و اما در نهایت اشیاء با طول عمر بالاتر در قسمت Generation 2 نگه داری میشوند، که شامل اشیاء استاتیک و متغیرهای با اسکوپ Global میشود.همچنین هر شی با سایز بزرگتر از 85000 بایت در این قسمت قرار میگیرد.

Garbage Collection بصورت مکرر روی قسمت اول حافظه Heap انجام میشود، جائی که اشیاء با طول عمر پایین در آن ذخیره شده اند، وقتی که یکی از این اشیاء مدت زمان زیادی مورد استفاده قرار گیرند ، آنرا به Generation1 انتقال میدهد که آنها را نجات یافتگان مینامیم!موقعی که GC به generation 1 رسید تمامی اشیاء مورد استفاده آنجا را به G2 انتقال میدهد و این اشیاء تا اتمام زمان اجرای برنامه آنجا باقی میمانند

چگونگی اطلاع از آبجکتهای مورد استفاده توسط GC

وقتیکه GC شروع بکار میکند تمامی Thread ها بجز ترد ی که GC را احضار کرده ، معلق میشوند و GC شروع به اسکن Generation 0 از اشیاء بلا استفاده میکند و ساختاری از اشیاء مورد استفاده را برای خود میسازد، هر آبجکتی که در این ساختار وجود نداشته باشد را بعنوان یک شی بلا استفاده در برنامه میشناسد و حافظه اختصاص داده شده از آن پس میگیرد و حافظه را مجددا برای اشیاء جدید قابل استفاده میکند.


در انتهای این پروسه GC وظیفه اختصاص آدرسهای حافظه از اشیاء حذف شده به اشیاء مورد استفاده را بر عهده دارد و با انجام اینکار حافظه برای استفاده اشیاء جدید جمع و جورتر میشود

قسمت سوم


csharpgarbage collectorheapheap generationmemory
برنامه نویس ASP.NET | عکاس منظره
شاید از این پست‌ها خوشتان بیاید