Çöp Toplama ve Bellek Yönetimi
Bellek yönetimi, programların belleği nasıl tahsis edip geri kazandığını düzenler; çöp toplama ise artık erişilemeyen nesneleri belirleyerek ve serbest bırakarak geri kazanımı otomatikleştirir.
Tanım
Bellek yönetimi, bir programın belleğinin tahsis edilmesi ve geri kazanılmasıdır; çöp toplama ise programın artık erişemediği nesneler tarafından işgal edilen belleği serbest bırakan otomatik bir geri kazanım sürecidir, bu da programcıyı açıkça serbest bırakma işleminden kurtarır.
Kapsam
Bu konu, dil çalışma zamanları için otomatik ve manuel bellek yönetimini kapsamaktadır: referans sayma, işaretle-ve-süpür (mark-and-sweep), kopyalama ve jenerasyonel toplama; erişilebilirliğin izlenmesi; ve verim, duraklama süresi ve bellek yükü arasındaki dengelemeler. Eşzamanlı ve artımlı toplayıcıları ve toplama stratejisi ile dil tasarımı arasındaki ilişkiyi ele almaktadır.
Temel sorular
- Bir toplayıcı, hangi nesnelerin hala gerekli olduğunu nasıl belirler?
- Verim, gecikme süresi ve bellek ayak izi arasındaki dengelemeler nelerdir?
- Nesneleri yaşa göre ayırmak (jenerasyonel toplama) verimliliği neden artırır?
- Toplama işlemi, etkileşimli veya gerçek zamanlı sistemlerde uzun duraklamaları nasıl önleyebilir?
Temel kuramlar
- İzleme tabanlı çöp toplama
- McCarthy, Lisp için otomatik çöp toplamayı tanıtmış ve programın köklerinden hangi nesnelerin erişilebilir kaldığını izleyerek belleği geri kazanma fikrini ortaya koymuştur.
- Jenerasyonel toplama
- Lieberman ve Hewitt, çoğu nesnenin genç yaşta yok olduğunu gözlemlemiş ve genç jenerasyonları daha sık toplama önerisinde bulunarak pratikte toplama maliyetini önemli ölçüde azaltmışlardır (jenerasyonel hipotez).
- Toplama tekniklerinin taksonomisi
- Wilson ve Garbage Collection Handbook, referans sayma, işaretle-süpür, kopyalama, artımlı ve eşzamanlı toplayıcıların tasarım alanını ve performans dengelemelerini düzenlemektedir.
Klinik önem
Otomatik bellek yönetimi, sarkan işaretçiler (dangling pointers) ve bellek sızıntıları (memory leaks) gibi tüm hata sınıflarını ortadan kaldırmaktadır, bu nedenle çoğu üst düzey dil çöp toplamaya güvenmektedir. Toplayıcı seçimi, özellikle etkileşimli ve sunucu sistemleri için uygulama gecikmesini ve verimini güçlü bir şekilde etkilemektedir.
Tarihçe
McCarthy, 1960 yılında Lisp ile çöp toplamayı tanıtmıştır. Kopyalama tabanlı toplama (Cheney) ve referans sayma bunu takip etmiş, Lieberman ve Hewitt'in 1983 tarihli jenerasyonel toplayıcısı ise nesne ömürlerinden faydalanmıştır. Sonraki on yıllar, Wilson'ın 1992 tarihli çalışmasında ve 2011 tarihli Garbage Collection Handbook'ta kapsamlı bir şekilde incelenen artımlı, eşzamanlı ve bölge tabanlı toplayıcıları ortaya çıkarmıştır.
Tartışmalar
- Otomatik toplama ile manuel veya sahiplik tabanlı yönetim karşılaştırması
- Tasarımcılar, güvenli ve kullanışlı olmasına rağmen duraklamalar ve ek yük getirebilen çöp toplama ile programcı yükü ve riski pahasına öngörülebilir performans ve daha düşük ayak izi sunan manuel veya sahiplik tabanlı yönetim arasındaki tartışmayı sürdürmektedir.
Öne çıkan isimler
- John McCarthy
- Henry Lieberman
- Carl Hewitt
- Richard Jones
- Paul Wilson
İlgili konular
Temel eserler
- mccarthy1960
- lieberman1983
- wilson1992
- jones2011
Sıkça sorulan sorular
- Bir çöp toplayıcı, hangi nesneleri serbest bırakacağını nasıl bilir?
- İzleme tabanlı bir toplayıcı, yığın değişkenleri ve genel değişkenler gibi bilinen köklerden başlar ve tüm erişilebilir nesneleri işaretlemek için referansları takip eder; erişilemeyen her şey geri kazanılabilir.
- Jenerasyonel çöp toplama neden etkilidir?
- Çoğu nesne tahsisten kısa bir süre sonra erişilemez hale geldiği için, genç jenerasyonu sık sık toplamak, çoğu çöpü ucuza geri kazandırırken, daha yaşlı, uzun ömürlü nesneler çok daha az sıklıkla taranmaktadır.