PDA

View Full Version : آموزش: Automatic Memory Management در NET.



tooraj_azizi_1035
شنبه 31 اردیبهشت 1390, 16:25 عصر
مدیریت خودکار حافظه در یکی از سرویس هایی است که Common Language Runtime در حین اجرای مدیریت شده کد (Managed Execution Process) ارائه می کند. سرویس Garabage Collector در CLR اختصاص و رهاسازی حافظه به Application را بر عهده دارد. برای Developer ها، این بدان معنی است که آنها نیازی به نوشتن کدهای اختصاص و رهاسازی کد مادامی که برنامه Managed می نویسند ندارند.

Automatic Memory Management می تواند مشکلات رایجی مانند فراموشی در مورد رها سازی حافظه اشغال شده توسط یک شیء را حذف کند

اختصاص حافظه:
managed heap یک اشاره گر که آدرس جایی که حافظه مورد نیاز شیء بعدی می بایست از این آدرس به بعد اختصاص یابد را نگه می دارد. در ابتدای کار این اشاره گر به ابتدای managed heap مقداردهی اولیه می شود. حافظه مورد نیاز تمام نوع های داده ای از نوع Reference Type از این محل تامین می شود. وقتی Application اولین شیء را ایجاد می کند حافظه مورد نیاز از ابتدای managed heap اختصاص می یابد و وقتی شیء بعدی را ایجاد می کند Garabage Collector آدرس بعد از آدرس اولین شیء را اختصاص می دهد. تا زمانی که فضای آدرس در دسترس است این انتساب ها به طور پیوسته صورت می گیرد. اختصاص حافظه از managed heap سریعتر از اختصاص از طریق حافظه مدیریت نشده می باشد چون Runtime این کار را با اضافه کردن یک مقدار به اشاره گر صورت می دهد این نوع اختصاص سرعتی برابر سرعت اختصاص حافظه از پشته می باشد چون اشیاء جدید به طور پیوسته اختصاص می یابند و به طور پیوسته ذخیره می شوند و Application می تواند به اشیاء سریعتر دست پیدا کند.

آزادسازی حافظه:
موتور بهینه ساز Garabage Collector بهترین زمان را برای جمع آوری زباله ها بر اساس اختصاص های حافظه تعیین می کند. این موتور حافظه اختصاص یافته به اشیایی را که دیگر توسط Application استفاده نمی شوند را آزاد می کند.

هر Application دارای مجموعه ای از ریشه هاست. هر ریشه یا به یک شیء موجود در managed heap اشاره دارد یا به Null ست شده است. هر ریشه از Application حاوی اشاره گر های اشیای سراسری یا ایستا، متغیرهای محلی و پارامترهای ارجاعی به اشیاء روی پشته نخ اجرایی و رجیسترهای CPU می باشد.

garbage collector به لیست ریشه های فعالی که just-in-time (JIT) compiler (http://msdn.microsoft.com/en-us/library/k5532s8a.aspx) و Runtime نگهداری می کند دسترسی دارد. با استفاده از این لیست، garbage collector لیست ریشه های Application را تست و در پردازش یک گراف که حاوی تمام اشیایی که از طریق ریشه ها قابل دستیابی اند ایجاد می کند.
ادامه دارد...