رزرو مشاوره تلفنی تک جلسه‌ای با استاد رضوی
رزرو مشاوره تلفنی
کنکور کامپیوتر
0
اشتراک
 

Garbage Collection(GC) چیست و چگونه کار میکند؟

این مقاله عالی بررسی کرده که Garbage Collection(GC) چیست و چگونه کار میکند؟ و مزایای Garbage Collection و انواع روش های Garbage Collection را معرفی کرده

Garbage Collection چیست؟

Garbage Collection

جمع آوری زباله (Garbage Collection یا به‌طور مختصر GC) یک ویژگی بازیابی حافظه است که در زبان‌های برنامه‌نویسی مانند #C و جاوا تعبیه شده است. GC به‌طور خودکار فضایی که دیگر مورد نیاز برنامه نیست را حذف می‌کند. جمع آوری زباله تضمین می‌کند که یک برنامه از میزان حافظه خود بیشتر استفاده نمی‌کند یا به نقطه‌ای نمی‌رسد که دیگر نتواند کار کند. در زبان های برنامه نویسی قدیمی مانند C و سی پلاس پلاس، توسعه‌دهنده باید خودش و به‌صورت دستی عمل بازیابی حافظه را انجام می‌داد که این کار باعث به‌وجود آمدن باگ های مرتبط با حافظه می‌شد. مثلا یک توسعه‌دهنده ممکن است فراموش کند که برنامه دیگر نیازی به حافظه ندارد و حافظه را آزاد کند و این باعث می‌شود برنامه به سرعت از کل RAM استفاده کند. زبان های برنامه نویسی که شامل GC هستند، سعی می‌کنند با دقت کامل و به‌طور خودکار حافظه را آزاد کنند و از بروز چنین مشکلاتی جلوگیری کنند.

Garbage Collection چگونه کار می‌کند؟

هر زبان برنامه نویسی Garbage Collection را به‌طور متفاوتی پیاده سازی می‌کند، اما از لحاظ خودکار بودن این عمل، همگی شبیه به یکدیگر هستند. در بعضی موارد، قابلیت های GC را می‌توان از طریق کتابخانه یا ماژول به یک زبان اضافه کرد. GC یک جزء نسبتا رایج در اکثر زبان های برنامه نویسی مدرن است و این تنها رویکرد مدیریت حافظه است که بیشتر توسعه‌دهنده‌ها آن را می‌شناسند و به‌طور کلی GC یک قابلیت مهم برای توسعه‌دهندگان به‌شمار می‌رود. GC یک فرآیند مداوم است که به پردازنده (CPU) نیاز دارد و می‌تواند عملکرد کلی برنامه را تحت‌تأثیر قرار دهد یا حتی عملکرد آن را مختل کند. به همین دلیل، برخی از توسعه‌دهندگان هنوز در مورد مزایای GC بحث می‌کنند و معتقدند که آنها می‌توانند حافظه را بهتر از یک فرآیند خودکار مدیریت کنند.

نسل ها در Garbage Collection

یکی از روش‌های رایج تقسیم فضای حافظه پشته، بر اساس طول عمر یک شی است، که به سه نسل تقسیم می‌شود :

نسل اول GC

تمام اشیاء تازه ایجاد شده در نسل اول شروع می‌شوند. اشیاء کوتاه‌مدت، مانند متغیرهای موقت، هرگز از این نسل خارج نمی‌شوند. Garbage Collection آنها را شناسایی کرده و حذف می‌کند و فضای حافظه اختصاص داده شده آنها را آزاد می‌کند.

نسل دوم GC

اشیایی که در نسل اول از فرآیند GC جان سالم به در می‌برند به نسل دوم منتقل می‌شوند، هنگامی که فرآیند GC در این سطح اجرا می‌شود، Garbage Collector (جمع آورنده زباله) مجدداً اشیاء موجود در این نسل را که دیگر مورد نیاز نیستند، شناسایی و حذف می‌کند.

نسل سوم  GC

جمع آوری زباله در این سطح معمولا کمتر از اشیاء نسل اول انجام می‌شود. نسل سوم شامل اشیاء با عمر طولانی و دائمی است که از فرآیند GC نسل دوم جان سالم به در می‌برند. اشیاء تا زمانی که دیگر مورد نیاز نباشند در این سطح باقی می‌مانند، مانند سایر جنبه‌های Garbage Collection، زبان های برنامه نویسی رویکردهای متفاوتی برای مدیریت هر نسل از اشیاء دارند. مثلا نسل‌ها در CLR شامل نسل‌های صفر و یک و دو هستند، به این صورت که ابتدا GC اشیا نسل صفر را بررسی می‌کند و اگر فرایند GC برای نسل صفر حافظه کافی را بازسازی نکرد این فرآیند برای اشیا در نسل یک اجرا می‌شود و به همین ترتیب نسل دو نیز بررسی می‌شود.

در جاوا رویکرد کمی متفاوت است اما همچنان حافطه را به سه فضای مجزا تقسیم می‌کند:

  • Young Generation (نسل جوان)
  • Old Generation (نسل قدیم)
  • Permanent Generation (نسل ثابت)

این سه سطح به ترتیب با نسل 0، 1 و 2 CLR مطابقت دارند، اگرچه Garbage Collection می‌تواند در هر سطحی اتفاق بیفتد، اما در نسل‌های قدیمی کمتر اتفاق می‌افتد.

مزایا Garbage Collection

همانطور که گفتیم GC برنامه‌نویس را از مدیریت دستی حافظه راحت می‌کند. و این عمل باعث جلوگیری از بروز بعضی از خطاها می‌شود. مثلا :

  • Dangling Pointers (نشانگرهای سرگردان): این مشکل زمانی اتفاق می افتد که بخشی از حافظه آزاد شده باشد در حالیکه همچنان اشاره‌گری به آن شی در حال اشاره کردن باشد.
  • Double Free Bugs (اشکالات مضاعف رایگان): این مشکل هنگامی که برنامه سعی می‌کند تا بخشی از حافظه، که قبلاً پاک شده ‌است را دوباره پاک کند، رخ می‌دهد.
  • Memory Leaks (نشت حافظه): یک نوع خاصی از Memory Leaks زمانی رخ می دهد که برنامه حافظه ای از اشیایی را که دیگر در دسترس نیستند را نمی‌تواند آزاد کند و این به مرور زمان باعث فرسودگی حافظه می‌شود.

معایب Garbage Collection

با وجود مزایای آن، Garbage Collection می‌تواند تأثیر منفی بر عملکرد داشته باشد. از معایب آن می‌توان به موارد زیر اشاره کرد:

  • مصرف منابع اضافی
  • تأثیر بر عملکرد
  • ناسازگاری با مدیریت منابع دستی
  • توقف در اجرای برنامه

در فرآیند Garbage Collection از منابع محاسباتی برای این که کدام حافظه‌ها باید حذف شوند استفاده می‌شود. در صورت مدیریت نکردن طول عمر اشیا به‌صورت دستی در یک برنامه، ممکن است سربار محاسباتی برای انجام فعالیت‌های GC منجر به کاهش عملکرد شود. در یک مقاله بررسی شده که GC نیاز به یک حافظه‌ای پنج برابر حافظه اصلی دارد تا به این سربار غلبه کند و عملکرد بهتری نسبت به حالت معمولی داشته باشد.  مثلا شرکت اپل با وجود تمام ویژگی‌های مثبت GC، آن را برای سیستم عامل IOS به علت تاثیر بر عملکرد سیستم نپذیرفت.

انواع روش های Garbage Collection

برای استفاده از Garbage Collection، روش‌های متعددی وجود دارد. مانند: Tracing، Reference Counting، Cycles، Space Overhead، Speed Overhead، Requires Atomicity، Not Real-time ، Escape Analysis و در نهایت Mark And Sweep که برخی از این روش‌ها برای بهترشدن معایب روش‌های قبلی خود به‌وجود آمده‌اند. ما در اینجا دو روش را به‌طور مختصر برای فهم بهتر Garbage Collection شرح می‌دهیم.

Reference Counting (شمارشگر مراجع)

روش Reference Counting، از نظر تکنیکی ساده ترین روش پیاده سازی GC است. این روش براساس شمارش تعداد اشاره‌گرهای مرجع هر شی کار می‌کند. علاوه بر مدیریت حافظه از این روش به‌طور گسترده در سیستم عامل‌ها به‌عنوان ابزار مدیریت منابع برای مدیریت منابع سیستم مانند فایل‌ها و سوکت‌ها و .... استفاده می‌شود.

هر شی اختصاص داده شده در تکنیک شمارش مراجع دارای یک فیلد شمارش است. مدیر حافظه وظیفه دارد مطمئن شود که تعداد ارجاعات هر شی با تعداد ارجاعات اشاره‌گر مستقیم به آن شی در همه زمان‌ها برابر است.

Mark And Sweep

این الگوریتم از دو فاز Mark (علامت گذاری) و Sweep (پاک کردن) تشکیل می‌شود. ابتدا تمام اشیایی که اشاره‌گر مرجع دارند Mark می‌شوند و در مرحله بعدی اشیایی که علامتگذاری نشده‌اند Sweep می‌شوند. برای درک بهتر این الگوریتم تصویر زیر را مشاهده کنید.

MarkandSweep

جمع‌بندی

دراین مطلب سعی براین داشتیم تا مفهوم جمع آوری زباله (GC) را شرح دهیم و دریافتیم که Garbage Collector یک ویژگی بازیابی حافظه است. یک زبان برنامه نویسی مجهز به GC شامل یک یا چند جمع کننده زباله (موتورهای GC) است که به طور خودکار فضای حافظه را، آزاد می کند. همچنین مزایا و معایب جمع آوری زباله (GC) را بررسی و نسل‌های آن را معرفی کردیم و انواع روش‌های Garbage Collection را شرح دادیم.

Garbage Collection یا بازیافت زباله چیست؟

در علم کامپیوتر نوعی از مدیریت خودکار حافظه، که به‌طور خودکار توسط Garbage Collector، حافظه غیرقابل دسترس را پاک سازی می‌کند؛ Garbage Collection یا به‌اختصار GC گفته می‌شود.

Garbage Collection چگونه کار می‌کند؟

هر زبان برنامه نویسی Garbage Collection را به‌طور متفاوتی پیاده‌سازی می کند، اما از این لحاظ که همه آنها این عمل را بطور خودکار انجام می‌دهند شبیه به یکدیگر هستند. الگوریتم‌های متفاوتی برای کارکردن GC وجود دارد از معروف‌ترین الگوریتم‌ها می‌توان Mark and Sweep را نام برد.

امتیازدهی51111111111امتیاز 5.00(1 امتیاز)
اشتراک
تلگرام اینستاگرام تماس با پشتیبانی: 09378555200 تماس با پشتیبانی: 09378555200
خدمات ما پشتیبانی کنکور کامپیوتر

سؤالی داری؟ از هر راهی که راحت‌تری.

تماس با پشتیبانی۰۹۳۷۸۵۵۵۲۰۰ پشتیبانی در تلگرامپاسخ‌گویی پیامی کانال تلگراماخبار و اطلاعیه‌ها اینستاگرامkonkurcomputer.ir
اشتراک‌گذاری این مطلب

Garbage Collection(GC) چیست و چگونه کار میکند؟

تلگرام واتس‌اپ ایکس
https://www.konkurcomputer.ir/garbage-collection-gc-چیست-و-چگونه-کار-میکند؟.html
خدمات کنکور کامپیوتر
هر چیزی که برای قبولی لازم داری، یک‌جاخدمات ما

از مشاوره‌ی شخصی با استاد رضوی تا فیلم‌های دروس، پلتفرم‌ها و ابزارهای رایگان

مشاوره‌ی شخصی با استاد رضوی
تماس با پشتیبانی