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