کلمه جو
صفحه اصلی

بازیافت حافظه

دانشنامه عمومی

در علوم رایانه بازیافت حافظه یا زباله روبی (به انگلیسی: Garbage collection) نوعی مدیریت حافظهٔ خودکار است. این حالت خاصی از مدیریت منابع است و منبع محدودی که مدیریت می شود، حافظه است. زباله روبی تلاشی برای بازیافت قطعات کوچک حافظه و ادغام آن ها است که این حافظه ها قبلاْ توسط اشیاء به کار گرفته شده اند، ولی دیگر مورد نیاز برنامه نیستند. تکنیک بازیافت حافظه توسط جان مک کارتی در حدود سال ۱۹۵۹ برای حل مشکلات لیسپ اختراع شده است.
مشکل پوینتر سرگردان: این مشکل هنگامی رخ می دهد که بخشی از حافظه آزاد شده باشد اما همچنان اشاره گری به آن شئ در حال اشاره کردن باشد.
مشکل آزادسازی دوبارهٔ حافظه: این مشکل هنگامی که برنامه سعی می کند تا بخشی از حافظه، که قبلاً پاک شده یا شی جدیدی به آن اختصاص داده شده است را دوباره پاک کند، ایجاد می شود.
انواع مخصوصی از نشت حافظه: زمانی که برنامه قادر نیست حافظه ای از اشیائی را که دیگر دردسترس نیستند، آزاد کند، فرسودگی حافظه رخ می دهد.
پیاده سازی کارآمد ساختمان داده های پایدار
بازیافت حافظه معمولاْ به عنوان جنبهٔ مخالف مدیریت دستی حافظه بیان می شود که در آن آزادسازی هر شی از حافظه به صورت دستی انجام و توسط برنامه نویس مشخص می شود.مانند سایر تکنیک های مدیریت حافظه، بازیافت حافظه میزان قابل توجهی از زمان کل اجرای یک برنامه را شامل می شود، در نتیجه می تواند تأثیر قابل توجهی روی کارایی برنامه داشته باشد. با استفاده از یک پیاده سازی مناسب، حافظهٔ کافی و با توجه به کاربرد، بازیافت حافظه می تواند سریع تر از مدیریت دستی حافظه باشد. درحالی که مدیریت دستی حافظه در گذشته با استفاده از الگوریتم های غیر بهینهٔ پاک سازی حافظه، یک راه حل بوده است.همچنین منابع خاص دیگری به غیر از حافظه مانند سوکت های شبکه، پایگاه های داده و فایل ها به طور معمول با تکنیک زباله روبی مدیریت نمی شوند. روش هایی که برای مدیریت چنین منابعی استفاده می شود، به خصوص مخرب ها، ممکن است برای مدیریت حافظه کافی باشند و نیازی به استفاده از روش زباله روبی نباشد.
اصول ابتدایی زباله روبی حاکی از این است که در یک برنامه، اشیایی را که در آینده قابل دسترسی نیستند، پیدا کرده و حافظهٔ تخصیص داده شده به آن ها را آزاد کنیم.بسیاری از زبان های برنامه نویسی به روش زباله روبی نیاز دارند، چه به عنوان بخشی از خصوصیات زبان برنامه نویسی (مانند جاوا، سی شارپ، گو، دی و بسیاری از زبان های اسکریپت نویسی) و چه به صورت مؤثر برای پیاده سازی های عملی مانند زبان صوری حساب لاندا. به چنین زبان هایی، زبان های زباله روبی می گویند. سایر زبان ها به گونه ای طراحی شده اند که مدیریت حافظهٔ آن ها به صورت دستی انجام می شود، اما پیاده سازی زباله روبی هم دارند مانند C و ++C.برخی از زبان ها مانند Ada، Modula-3 و C++/CLI هر دو قابلیت آزادسازی دستی حافظه و زباله روبی را دارند و از دو هرم جداگانه برای نگهداری اشیائی که با زباله روب حذف می شوند و اشیائی که به صورت دستی آزاد می شوند؛ استفاده می کنند.
بازیافت حافظه باعث می شود تا برنامه نویس دخالتی در مدیریت حافظه نداشته باشد، در نتیجه مشکلات برنامه نویسی زیر دیگر رخ نخواهند داد:


کلمات دیگر: