این راهنما تا حد زیادی روی مصرف حافظه فیزیکی (Physical Memory) توسط GC تمرکز کرده است، اما یکی از سؤالاتی که بهطور مرتب مطرح میشود این است که مفهوم دقیق آن چیست و چه تفاوتی با حافظه مجازی (Virtual Memory) (که معمولاً در برنامههای مانیتورینگ مانند top با عنوان "VSS" نمایش داده میشود) دارد.
حافظه فیزیکی، همان حافظهای است که در بیشتر رایانهها روی تراشههای فیزیکی RAM قرار دارد. حافظه مجازی یک لایه انتزاعی (Abstraction) روی حافظه فیزیکی است که توسط سیستمعامل ارائه میشود تا برنامهها را از یکدیگر ایزوله کند. همچنین برای برنامهها کاملاً طبیعی و قابلقبول است که فضای آدرس مجازی (Virtual Address Space) را رزرو کنند که اصلاً به هیچ آدرس فیزیکی نگاشت (Map) نشده است.
از آنجا که حافظه مجازی صرفاً یک نگاشت (Mapping) است که توسط سیستمعامل مدیریت میشود، ایجاد رزروهای بزرگ حافظه مجازی که به حافظه فیزیکی نگاشت نشدهاند، معمولاً بسیار کمهزینه است.
Runtime زبان گو (Go Runtime) بهطور کلی از این دیدگاه نسبت به هزینه حافظه مجازی به چند روش مختلف استفاده میکند:
-
Runtime زبان گو هرگز حافظه مجازی را که نگاشت کرده است، حذف (Delete) نمیکند. در عوض، از عملیات ویژهای که بیشتر سیستمعاملها فراهم میکنند استفاده میکند تا منابع حافظه فیزیکی مرتبط با یک بازه از حافظه مجازی را بهطور صریح آزاد کند.
-
این تکنیک بهطور صریح برای مدیریت محدودیت حافظه (Memory Limit) و بازگرداندن حافظهای که دیگر توسط Runtime گو مورد نیاز نیست به سیستمعامل، به کار میرود. همچنین Runtime گو حافظهای را که دیگر به آن نیازی ندارد، بهطور مداوم در پسزمینه (Background) آزاد میکند. برای اطلاعات بیشتر به منابع تکمیلی مراجعه کنید.
-
در پلتفرمهای ۳۲ بیتی، Runtime گو بین ۱۲۸ مگابایت تا ۵۱۲ مگابایت از فضای آدرس را از پیش برای Heap رزرو میکند تا مشکلات تکهتکهشدن حافظه یا همان Fragmentation را محدود کند.
-
Runtime زبان گو در پیادهسازی چندین ساختار داده داخلی، از رزروهای بزرگ فضای آدرس حافظه مجازی استفاده میکند. در پلتفرمهای ۶۴ بیتی، این موارد معمولاً حداقل ردپای حافظه مجازی (Virtual Memory Footprint) در حدود ۷۰۰ مگابایت دارند. در پلتفرمهای ۳۲ بیتی، این مقدار ناچیز است.
⚠️ نتیجهگیری مهم: در نتیجه، معیارهای حافظه مجازی مانند "VSS" در ابزارهایی نظیر top معمولاً برای درک ردپای حافظه یک برنامه گو چندان مفید نیستند. به جای آن، روی "RSS" و معیارهای مشابه تمرکز کنید که بهطور مستقیمتری میزان مصرف حافظه فیزیکی را بازتاب میدهند.
این محتوا کاملا رایگان توسط تیم کدلپر ترجمه شده و در اختیار شما کاربران عزیز قرار گرفته است، هر گونه کپی برداری برای مقاصد غیر رایگان و بدون ذکر منبع، مورد پیگیری قانونی قرار میگیرد.
ترجمه شده از منبع: منبع مستندات