Junior
C#'ta Çöp Toplayıcı (Garbage Collector) nedir?
sobes.tech yapay zeka
AI'dan gelen yanıt
C# dilinde çöp toplayıcı, .NET çalışma ortamının (CLR) bir parçasıdır ve belleği otomatik olarak yönetir, erişilemez hale gelen nesnelerin kapladığı kaynakları serbest bırakır.
Çalışma prensipleri:
- Nesne takibi: Çöp toplayıcı, yönetilen yığında oluşturulan nesneleri izler.
- Erişilebilirliğin belirlenmesi: Çöp toplayıcı, hangi nesnelerin erişilebilir olduğunu belirler (yani, geçerli referanslara sahip olduklarını gösterir).
- Erişilemeyen nesnelerin toplanması: Artık erişilemeyen nesneler "çöp" olarak kabul edilir ve güvenli bir şekilde silinebilir.
Toplama süreci şunları içerir:
- İşaretleme (Marking). GC, yığın ve kayıtları tarar, kökleri (kök nesneleri) bulur. Köklerden başlayarak nesne grafını dolaşır ve erişilebilir nesneleri işaretler.
- Kompaktasyon (Compacting). Belleğin parçalanmasını azaltmaya yarar. GC, erişilebilir nesneleri ardışık bir bellek bloğuna taşır ve boş alan bırakır.
- Temizleme (Sweeping). İşaretlenmemiş erişilemeyen nesneler silinir ve belleği serbest bırakılır.
Ana özellikler:
- Otomatik yönetim: Belleğin serbest bırakılması konusunda geliştiricinin manuel sorumluluğunu ortadan kaldırır.
- Jenerasyonlar: Yığın, jenerasyonlara (Gen 0, Gen 1, Gen 2) ayrılmıştır. Bu, çoğu nesnenin hızla çöp haline gelmesi nedeniyle toplama işlemini optimize eder. Yeni nesneler Gen 0'da oluşturulur. Bir nesne Gen 0 toplamasından sonra hayatta kalırsa, Gen 1'e taşınır ve devam eder.
- Finalizerlar ve Temizlik (Finalizers and Disposal): GC,
IDisposableuygulayan nesneler için finalizerların hemen çalışmasını garanti etmez. Yönetilmeyen kaynakların serbest bırakılması için açık bir mekanizma kullanılmalıdır (Dispose(),usingifadesi).
// Kaynakların açıkça serbest bırakılması için using ifadesi kullanımı örneği
using (var stream = new System.IO.FileStream("temp.txt", System.IO.FileMode.Create))
{
// Dosya ile çalışma
} // stream.Dispose() otomatik olarak çağrılır