Middle+
Çöp Toplayıcı'nın (Garbage Collector) çalışma yöntemleri hakkında bilgi verin.
sobes.tech yapay zeka
AI'dan gelen yanıt
Çöp toplayıcı, program tarafından artık kullanılmayan nesnelerin kapladığı belleği serbest bırakan otomatik bellek yönetimi sürecidir.
Çöp toplayıcının temel çalışma yöntemleri:
-
Referans Sayımı:
- Her nesnenin, ona yapılan referansların sayısını tutan bir sayacı vardır.
- Bir nesneye referans oluşturulduğunda, sayaç artar.
- Bir referans kaybolduğunda (örneğin, bir değişken kapsam dışına çıktığında), sayaç azalır.
- Sayaç sıfıra ulaştığında, nesne erişilemez kabul edilir ve belleği serbest bırakılır.
- Sorunlar: Döngüsel referansları işleyemez, iki veya daha fazla nesne birbirine referans verdiğinde, ancak dışarıdan erişilemediğinde.
-
İzleme Çöp Toplayıcı (Tracing Garbage Collector):
- İki aşamada çalışır: işaretleme ve tarama veya sıkıştırma.
- İşaretleme aşaması: "Kökler" (root set) - erişilebilir olduğu garanti edilen nesnelerden (örneğin, küresel değişkenler, yığın üzerindeki nesneler) başlar. GC, köklerden erişilebilen tüm nesneleri tarar ve onları "canlı" olarak işaretler.
- Tarama aşaması: GC, tüm yığını tarar. İşaretlenmemiş nesneler "çöp" olarak kabul edilir ve belleği serbest bırakılır.
- Sıkıştırma (isteğe bağlı): Tarama sonrası, GC "canlı" nesneleri hareket ettirerek bellek parçalanmasını önleyebilir.
- Avantajlar: Döngüsel referansları işleyebilir.
- Dezavantajlar: Programın çalışmasında duraklamalara (stop-the-world) neden olabilir.
En yaygın izleme çöp toplayıcı algoritmaları:
- Mark-and-Sweep: Canlı nesneleri işaretler ve sonra çöpü toplar.
- Mark-and-Compact: Canlı nesneleri işaretler ve sonra onları yer değiştirerek parçalanmayı önler.
- Kopyalama: Yığını ikiye böler. Toplama sırasında, GC canlı nesneleri bir yarıdan diğerine kopyalar ve orijinal yarıyı serbest bırakır.
- Nesilsel (Generational): Çoğu nesnenin gençken öldüğü varsayımına dayanır. Yığın nesillere ayrılır (örneğin, genç ve yaşlı). GC, genç nesilde daha sık çöp toplar, bu da daha kısa duraklamalara yol açar.
Çöp toplayıcının belirli çalışma yöntemi, kullanılan programlama diline ve uygulamasına bağlıdır. Örneğin, Java ve C# farklı nesil toplayıcı varyantları kullanır, bunlar arasında nesilsel toplayıcılar da bulunur. Python ise geleneksel olarak referans sayımı kullanır ve döngüsel referansları tespit etmek için ek mekanizmalar içerir; daha yeni sürümlerde ise izleme öğeleri de kullanılmaktadır.