آشنایی با Garbage Collector در سی شارپ و چگونگی کارکرد آن، قسمت سوم
همانطور که در اینجا و اینجا توضیح دادم،Garbage Collector بعنوان بخشی از وظایف CLR مدیریت اتوماتیک حافظه را بر عهده دارد،استفاده از GC فواید زیادی دارد از جمله:
برنامه نویس را از درگیر شدن با مدیریت حافظه در امان نگه میدارد! و میتواند با خیال راحت به توسعه نرم افزار بپردازد
عملیات اختصاص اشیاء به Heap بسیار کارآمدتر میشود و از لحاظ پرفرمنسی بسیار به صرفه است
بازپس گیری اشیاء غیر استفاده ، پاکسازی حافظه و حفظ حافظه در دسترس جهت تخصیص آن در آینده
تامین امنیت حافظه با مطمئن شدن از اینکه آبجکت ها نتوانند محتوای یکدیگر را مورد استفاده قرار دهند
در ادامه توضیح مقدماتی از حافظه و مفاهیم آنرا ذکر میکنم
لیست زیر خلاصه ای از مفاهیم مهم در مورد حافظه ست:
هر پراسسی فضای حافظه مجازی(Virtual Memory Space) مختص به خود دارد و تمامی پراسس های روی یک کامپیوتر فضای حافظه فیزیکی و Page File(حافظه مجازی) را با یکدیگر به اشتراک میگذارند
در سیستم های 32 بیتی بصورت پیش فرض هر پراسس 2GB از فضای آدرس مجازی دارد
یک دولوپر تنها با فضای آدرس مجازی کار میکند و هرگز مستقیما نمیتواند حافظه فیزیکی را دستکاری کند،GC بصورت پیش فرض وظیفه پاکسازی و اختصاص حافظه مجازی را برعهده دارد، مگر اینکه برنامه نویس کدهای مختص سیستم عامل را بنویسد(با زبانی مثل C++) که در این صورت فانکشنهای ویندوز را برای مدیریت حافظه بکار میگیرد و اینجا خبری از CLR نیست.
حافظه مجازی میتواند سه وضعیت مختلف داشته باشد:
1- آزاد باشد،حافظه برای اختصاص به اشیاء مهیاست و هیچ بلاکی رفرنسی به حافظه ندارد(خالیست)
2- رزرو شده، بلاکی از حافظه در دسترس است و استفاده از این بلاک برای درخواست های اشیاء دیگر غیر قابل استفاده است، اگر چه هنوز امکان نوشتن در آن وجود ندارد
3- اختصاص یافته،بلاکی از حافظه به حافظه فیزیکی اختصاص یافته است
آدرسهای حافظه مجازی میتوانند تکه تکه شوند ، بلاک های آزادی در آن وجود دارند که از آنها به گودال یاد میشود، هنگامی که در خواست اختصاص حافظه روی میدهد ، مدیریت حافظه مجازی سعی در یافتن تک بلاک آزادی میگردد که اط لحاظ اندازه به قدری بزرگ باشد که بتواند آنجا قرار گیرد ، در صورت درخواست فضائی برابر 2GB ،حتی اگر این مقدار از فضای آزاد داشته باشیم تا وقتی که تک بلاکی با این سایز وجود نداشته باشد عملیات اختصاص حافظه صورت نمیگیرد.
شرایط استفاده از Garbage Collector
عملیات GC وقتی اتفاق می افتد که یکی از شرایط زیر وجود داشته باشد:
سیستم با کمبود حافظه فیزیکی مواجه شود، که توسط سیستم عامل تشخیص داده شده باشد
حافظه ای که توسط آبجکت مورد استفاده قرار گرفته از آستانه قابل قبولش فراتر رود
متد GC.Collect فراخوانی شود، تقریبا در تمامی موارد نیازی به صدا زدن این متد نیست ، چون GC بصورت مکرر اجرا میشود، این متد تنها برای مواردی که خیلی ضروری باشد و یا هنگام تست حافظه بایستی اجرا شود و در استفاده از آن بایستی احتیاط کرد.