Middle
Çöp Toplama Yöntemleri (Garbage Collector) hakkında bilgi verin.
sobes.tech yapay zeka
AI'dan gelen yanıt
Çöp toplama yöntemleri:
- Referans Sayımı (Reference Counting): Her nesne kendisine referans sayacı tutar. Sayac sıfıra ulaşınca, nesne çöp olarak kabul edilir ve silinir.
- Avantajlar: Basit, ana programın çalışmasını uzun süre engellemez.
- Dezavantajlar: Döngüsel referansları yönetemez; her nesnede ek alan gerektirir.
- İzleme Çöp Toplayıcılar (Tracing Garbage Collectors): "Kök" nesneler kümesiyle başlarlar (örneğin, aktif değişkenler, çağrı yığını) ve bu köklerden erişilebilen tüm nesneleri rekürsif olarak tarar. Erişilemeyen nesneler çöp sayılır.
- Temel izleme stratejileri:
- İşaretle ve Temizle (Mark and Sweep):
- İşaretle (Mark): Nesne grafiği üzerinde gezinerek erişilebilir tüm nesneleri işaretler.
- Temizle (Sweep): İkinci geçişte, işaretlenmeyen nesneleri siler.
- Dezavantajlar: Bellek parçalanması.
- İşaretle ve Sıkıştır (Mark and Compact):
- İşaretle (Mark): Mark and Sweep ile aynıdır.
- Sıkıştır (Compact): Canlı nesneleri hareket ettirerek ardışık hale getirir, parçalanmayı ortadan kaldırır.
- Dezavantajlar: Daha karmaşık, program durdurmayı gerektirebilir.
- Kopyalama (Copying): Belleği iki bölgeye ayırır (yarım alanlar). Her çöp toplama döngüsünde, bir bölgedeki canlı nesneler diğerine kopyalanır. Eski bölge tamamen temizlenir.
- Avantajlar: Parçalanma yok, çöp toplama sonrası hızlı bellek tahsisi.
- Dezavantajlar: İki kat daha fazla bellek gerektirir.
- İşaretle ve Temizle (Mark and Sweep):
- Temel izleme stratejileri:
- Jenerasyonel Çöp Toplama (Generational Garbage Collection): Çoğu nesnenin kısa ömürlü olduğu varsayımına dayanır. Bellek, genç ve yaşlı olmak üzere bölünür. Nesneler oluşturulurken genç nesneye konur. Birkaç çöp toplama sonrası, nesne yaşlı nesneye taşınır. Genç nesnelerde daha sık çöp toplanır.
- Avantajlar: Etkilidir, çünkü çoğu işlem genç nesnelerde yapılır ve az veri içerir.
- Dezavantajlar: Eski nesnelerden genç nesnelere referans takibi gerekir (kayıt kartları veya diğer mekanizmalar).
Dil örnekleri ve GC tipleri:
- Python: Referans sayımı (döngüsel referanslar için döngüsel toplama ile).
- Java, C#: Jenerasyonel, Mark and Sweep, Mark and Compact, Kopyalama (farklı sürümler ve JVM/.NET ayarlarına bağlı olarak çeşitli kombinasyonlar).
- Go: Eşzamanlı, jenerasyonel olmayan, optimizasyonlu Mark and Sweep.