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

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

garbage Collector چیست؟

در یک تعریف عامیانه میتوان گفت Garbage Collector که از این پس آنرا با GC میشناسیم ، راهیست برای پس گرفتن حافظه از اشیائی که در حال حاضر در برنامه مان بلا استفاده هستند، اما جدا از این تعریف اجازه دهید کمی وارد ساختار ذخیره داده ها در حافظه شویم و در مقاله ای دیگر تعریف GC را بازتر کنیم .



از لحاظ تقسیم بندی زبانهای برنامه نویسی در لول پایین دو نوع را میتوان نام برد:

-Unmanaged

-Managed

زبانهای مدیریت نشده ! زبانهایی هستند که برنامه نویس بصورت دیتیل جدا از بحث بیزینس بایستی درگیر مدیریت بزرگترین چالش پروژه های نرم افزاری یعنی حافظه باشد ، پس بیشتر این زبانها برای کارهایی همچون بازی سازی،توسعه سیستم عامل و ... مورد استفاده قرار میگیرند، مدیریت حافظه ها بصورت دستی توسط برنامه نویس انجام می شود(برنامه نویس موظف به کنترل نشت های حافظه ای ، مدیریت حافظه ها و... میباشد)

در سوی دیگر زبانهای مدیریت شده همچون جاوا و سی شارپ رو داریم که هر کدام به لطف عملکردهایی که داخل هسته این زبانها (در مورد سی شارپ CLR ) وجود دارد تا حد زیادی مدیریت حافظه را بر عهده میگیرند و برنامه نویس را درگیر جزئیات نمیکنند.

Heap و Stack

در سی شارپ با توجه به وجود دو نوع داده Value Type و Reference Type ، هر کدام از آنها موقع استفاده در قسمتی از حافظه قرار میگیرند برای Value Type ها این قسمت از حافظه Stack است ، ورود و خروج از Stack بصورت LIFO می باشد .

محل قرار گیری انواع مقادیر مختلف در Stack و Heap
محل قرار گیری انواع مقادیر مختلف در Stack و Heap


در مورد Reference Type ها قسمتی از حافظه که این نوع اشیا در آن قرار میگیرند Heap میباشد و برعکس Stack داده ها بصورت کاملا تصادفی درون آن قرار میگیرند و ترتیب و توالی منظمی مثل Stack را ندارد .

طول عمر اشیاء:

طول عمر انوع Value Type مختص به پایان اجرای یک متد می باشد و با پایان پذیرفتن متد ، اشیا بصورت اتوماتیک از حافظه حذف میشوند.

در مورد Reference Type ها، با توجه به نگهداری در Heap، طول عمر اشیا داخل آن منوط به یک متد یا ریجین خاصی نیست و تا اتمام اجرای برنامه در صورت حذف نکردن دستی درون آن نگه داشته میشوند، اینجاست که Garbage Collector وارد صحنه شده و اشیا غیر قابل استفاده را از حافظه حذف میکند و برنامه نویس را از درگیر کردن در مورد جزئیات حافظه بی نیاز میکند هر چند با توجه به اکثر پروژه های نرم افزاری که با این زبانها انجام میشوند(پروژه های بیزنسی) ، شناسایی موارد نشتی حافظه و کنترل این نوع حافظه ها بایستی با دقت انجام گردد تا بتوان از سربارهای حافظه ای در طول کارکرد پروژه جلوگیری کرد.

قسمت دوم این نوشته

garbage collectorcsharpheapstackmemory leak
برنامه نویس ASP.NET | عکاس منظره
شاید از این پست‌ها خوشتان بیاید