garbage Collector چیست؟
در یک تعریف عامیانه میتوان گفت Garbage Collector که از این پس آنرا با GC میشناسیم ، راهیست برای پس گرفتن حافظه از اشیائی که در حال حاضر در برنامه مان بلا استفاده هستند، اما جدا از این تعریف اجازه دهید کمی وارد ساختار ذخیره داده ها در حافظه شویم و در مقاله ای دیگر تعریف GC را بازتر کنیم .
از لحاظ تقسیم بندی زبانهای برنامه نویسی در لول پایین دو نوع را میتوان نام برد:
-Unmanaged
-Managed
زبانهای مدیریت نشده ! زبانهایی هستند که برنامه نویس بصورت دیتیل جدا از بحث بیزینس بایستی درگیر مدیریت بزرگترین چالش پروژه های نرم افزاری یعنی حافظه باشد ، پس بیشتر این زبانها برای کارهایی همچون بازی سازی،توسعه سیستم عامل و ... مورد استفاده قرار میگیرند، مدیریت حافظه ها بصورت دستی توسط برنامه نویس انجام می شود(برنامه نویس موظف به کنترل نشت های حافظه ای ، مدیریت حافظه ها و... میباشد)
در سوی دیگر زبانهای مدیریت شده همچون جاوا و سی شارپ رو داریم که هر کدام به لطف عملکردهایی که داخل هسته این زبانها (در مورد سی شارپ CLR ) وجود دارد تا حد زیادی مدیریت حافظه را بر عهده میگیرند و برنامه نویس را درگیر جزئیات نمیکنند.
در سی شارپ با توجه به وجود دو نوع داده Value Type و Reference Type ، هر کدام از آنها موقع استفاده در قسمتی از حافظه قرار میگیرند برای Value Type ها این قسمت از حافظه Stack است ، ورود و خروج از Stack بصورت LIFO می باشد .
در مورد Reference Type ها قسمتی از حافظه که این نوع اشیا در آن قرار میگیرند Heap میباشد و برعکس Stack داده ها بصورت کاملا تصادفی درون آن قرار میگیرند و ترتیب و توالی منظمی مثل Stack را ندارد .
طول عمر اشیاء:
طول عمر انوع Value Type مختص به پایان اجرای یک متد می باشد و با پایان پذیرفتن متد ، اشیا بصورت اتوماتیک از حافظه حذف میشوند.
در مورد Reference Type ها، با توجه به نگهداری در Heap، طول عمر اشیا داخل آن منوط به یک متد یا ریجین خاصی نیست و تا اتمام اجرای برنامه در صورت حذف نکردن دستی درون آن نگه داشته میشوند، اینجاست که Garbage Collector وارد صحنه شده و اشیا غیر قابل استفاده را از حافظه حذف میکند و برنامه نویس را از درگیر کردن در مورد جزئیات حافظه بی نیاز میکند هر چند با توجه به اکثر پروژه های نرم افزاری که با این زبانها انجام میشوند(پروژه های بیزنسی) ، شناسایی موارد نشتی حافظه و کنترل این نوع حافظه ها بایستی با دقت انجام گردد تا بتوان از سربارهای حافظه ای در طول کارکرد پروژه جلوگیری کرد.