Sobes.tech
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:

  1. İş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.
  2. 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.
  3. 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, IDisposable uygulayan 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(), using ifadesi).
// 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