Garbage Collection چیست؟
جمع آوری زباله (Garbage Collection یا بهطور مختصر GC) یک ویژگی بازیابی حافظه است که در زبانهای برنامهنویسی مانند #C و جاواجاوا چیست؟ تعریف، معنی و ویژگی های جاوا (java) از 0تا100جاوا یک زبان برنامه نویسی همه منظوره، مبتنی بر کلاس و شی گرا است که برای داشتن وابستگی های پیاده سازی کمتر طراحی شده است، زبان برنامه نویسی جاوا شبیه ++C است تعبیه شده است. GC بهطور خودکار فضایی که دیگر مورد نیاز برنامه نیست را حذف میکند. جمع آوری زباله تضمین میکند که یک برنامه از میزان حافظه خود بیشتر استفاده نمیکند یا به نقطهای نمیرسد که دیگر نتواند کار کند. در زبان های برنامه نویسی قدیمی مانند Cزبان برنامه نویسی C – مزایا و کاربرد زبان C – فرق C و ++Cاین مقاله عالی ابتدا توضیح میدهد که زبان برنامه نویسی c چیست، سپس به بررسی مزایا و معایب زبان C ، کاربردهای زبان سی ، و تفاوت بین C و ++C میپردازد و سی پلاس پلاسبرنامه نویسی سی پلاس پلاس چیست؟ مزایای برنامه نویسی C++؟برنامه نویسی سی پلاس پلاس چیست و چه کاربردی دارد؟ این صفحه عالی به بررسی مزایای برنامه نویسی C++ پرداخته و نمونه هایی از کدهای زبان برنامه نویسی ++C را آورده، توسعهدهنده باید خودش و بهصورت دستی عمل بازیابی حافظه را انجام میداد که این کار باعث بهوجود آمدن باگ های مرتبط با حافظه میشد. مثلا یک توسعهدهنده ممکن است فراموش کند که برنامه دیگر نیازی به حافظه ندارد و حافظه را آزاد کند و این باعث میشود برنامه به سرعت از کل RAM استفاده کند. زبان های برنامه نویسی که شامل GC هستند، سعی میکنند با دقت کامل و بهطور خودکار حافظه را آزاد کنند و از بروز چنین مشکلاتی جلوگیری کنند.
Garbage Collection چگونه کار میکند؟
هر زبان برنامه نویسی Garbage Collection را بهطور متفاوتی پیاده سازی میکند، اما از لحاظ خودکار بودن این عمل، همگی شبیه به یکدیگر هستند. در بعضی موارد، قابلیت های GC را میتوان از طریق کتابخانه یا ماژول به یک زبان اضافه کرد. GC یک جزء نسبتا رایج در اکثر زبان های برنامه نویسی مدرن است و این تنها رویکرد مدیریت حافظه است که بیشتر توسعهدهندهها آن را میشناسند و بهطور کلی GC یک قابلیت مهم برای توسعهدهندگان بهشمار میرود. GC یک فرآیند مداوم است که به پردازنده (CPU)پردازنده (CPU) چیست؟ بررسی انواع، وظایف و کاربردهاسی پی یو قلب کامپیوتر و کامپیوتر قلب دنیای کنونی است، بنابراین در این صفحه به معرفی و بررسی سیپییو یا همان پردازنده مرکزی (CPU) پرداخته شده، و بطور کامل توضیح دادهایم که CPU از چه بخش هایی تشکیل شده و هر بخش چه وظایف و مشخصاتی دارد. نیاز دارد و میتواند عملکرد کلی برنامه را تحتتأثیر قرار دهد یا حتی عملکرد آن را مختل کند. به همین دلیل، برخی از توسعهدهندگان هنوز در مورد مزایای GC بحث میکنند و معتقدند که آنها میتوانند حافظه را بهتر از یک فرآیند خودکار مدیریت کنند.
نسل ها در Garbage Collection
یکی از روشهای رایج تقسیم فضای حافظه پشته، بر اساس طول عمر یک شی است، که به سه نسل تقسیم میشود :
نسل اول GC
تمام اشیاء تازه ایجاد شده در نسل اول شروع میشوند. اشیاء کوتاهمدت، مانند متغیرهای موقت، هرگز از این نسل خارج نمیشوند. Garbage Collection آنها را شناسایی کرده و حذف میکند و فضای حافظه اختصاص داده شده آنها را آزاد میکند.
نسل دوم GC
اشیایی که در نسل اول از فرآیند GC جان سالم به در میبرند به نسل دوم منتقل میشوند، هنگامی که فرآیند GC در این سطح اجرا میشود، Garbage Collector (جمع آورنده زباله) مجدداً اشیاء موجود در این نسل را که دیگر مورد نیاز نیستند، شناسایی و حذف میکند.
نسل سوم GC
جمع آوری زباله در این سطح معمولا کمتر از اشیاء نسل اول انجام میشود. نسل سوم شامل اشیاء با عمر طولانی و دائمی است که از فرآیند GC نسل دوم جان سالم به در میبرند. اشیاء تا زمانی که دیگر مورد نیاز نباشند در این سطح باقی میمانند، مانند سایر جنبههای Garbage Collection، زبان های برنامه نویسی رویکردهای متفاوتی برای مدیریت هر نسل از اشیاء دارند. مثلا نسلها در CLR شامل نسلهای صفر و یک و دو هستند، به این صورت که ابتدا GC اشیا نسل صفر را بررسی میکند و اگر فرایند GC برای نسل صفر حافظه کافی را بازسازی نکرد این فرآیند برای اشیا در نسل یک اجرا میشود و به همین ترتیب نسل دو نیز بررسی میشود.
در جاواجاوا چیست؟ تعریف، معنی و ویژگی های جاوا (java) از 0تا100جاوا یک زبان برنامه نویسی همه منظوره، مبتنی بر کلاس و شی گرا است که برای داشتن وابستگی های پیاده سازی کمتر طراحی شده است، زبان برنامه نویسی جاوا شبیه ++C است رویکرد کمی متفاوت است اما همچنان حافطه را به سه فضای مجزا تقسیم میکند:
- 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 میشوند. برای درک بهتر این الگوریتم تصویر زیر را مشاهده کنید.
جمعبندی
دراین مطلب سعی براین داشتیم تا مفهوم جمع آوری زباله (GC) را شرح دهیم و دریافتیم که Garbage Collector یک ویژگی بازیابی حافظه است. یک زبان برنامه نویسی مجهز به GC شامل یک یا چند جمع کننده زباله (موتورهای GC) است که به طور خودکار فضای حافظه را، آزاد می کند. همچنین مزایا و معایب جمع آوری زباله (GC) را بررسی و نسلهای آن را معرفی کردیم و انواع روشهای Garbage Collection را شرح دادیم.
Garbage Collection یا بازیافت زباله چیست؟
در علم کامپیوتر نوعی از مدیریت خودکار حافظه، که بهطور خودکار توسط Garbage Collector، حافظه غیرقابل دسترس را پاک سازی میکند؛ Garbage Collection یا بهاختصار GC گفته میشود.
Garbage Collection چگونه کار میکند؟
هر زبان برنامه نویسی Garbage Collection را بهطور متفاوتی پیادهسازی می کند، اما از این لحاظ که همه آنها این عمل را بطور خودکار انجام میدهند شبیه به یکدیگر هستند. الگوریتمهای متفاوتی برای کارکردن GC وجود دارد از معروفترین الگوریتمها میتوان Mark and Sweep را نام برد.