Sobes.tech
Junior

C#-də Tullantı Toplayıcı (Garbage Collector) nədir?

sobes.tech Süni İntellekt

AI-dan cavab

C# dilində çöp toplayıcı, .NET icra mühitinin (CLR) bir hissəsidir və avtomatik olaraq yaddaşı idarə edir, artıq əlçatmaz olan obyektlərin tutduğu resursları azad edir.

İş prinsipləri:

  • Obyektlərin izlənməsi: Çöp toplayıcı, idarə olunan yığma daxilində yaradılan obyektləri izləyir.
  • Əldə edilə bilənliyin müəyyənləşdirilməsi: Hansı obyektlərin əldə edilə bilən olduğunu müəyyən edir (yəni, düzgün istinadlara malikdirlər).
  • Əldə edilə bilməyən obyektlərin toplanması: Artıq əldə edilə bilməyən obyektlər "zibil" kimi qəbul edilir və təhlükəsiz şəkildə silinə bilər.

Toplama prosesi aşağıdakı mərhələləri əhatə edir:

  1. İşarələmə (Marking). GC yığma və qeydiyyatları skan edir, kökləri (kök obyektləri) tapır. Kökdən başlayaraq obyekt qrafını gəzərək, əldə edilə bilən obyektləri işarələyir.
  2. Kompaktlaşdırma (Compacting). Yaddaşın parçalanmasını azaldır. GC əldə edilə bilən obyektləri ardıcıl yaddaş blokuna köçürür və boş yer buraxır.
  3. Təmizləmə (Sweeping). İşarələnməyən əldə edilə bilməyən obyektlər silinir və yaddaş boşaldılır.

Əsas xüsusiyyətlər:

  • Avtomatik idarəetmə: İnkişaf etdiricinin yaddaşı azad etmə ilə bağlı əl ilə məsuliyyətini aradan qaldırır.
  • Nəsil (Generation): Yığma nəsillərə bölünür (Gen 0, Gen 1, Gen 2). Bu, çox obyektin tezliklə zibilə çevrilməsi səbəbindən toplanmanı optimallaşdırır. Yeni obyektlər Gen 0-də yaradılır. Əgər obyekt Gen 0-də toplanmadan sağ qalırsa, Gen 1-ə köçürülür və s.
  • Finalizatorlar və azad etmə (Finalizers and Disposal): GC, IDisposable-i həyata keçirən obyektlər üçün finalizatorların dərhal icrasını təmin etmir. İdarə olunmayan resursların azad edilməsi üçün açıq mexanizm istifadə olunmalıdır (Dispose(), using bəyanatı).
// Resursların açıq şəkildə azad edilməsi üçün using bəyanatından nümunə
using (var stream = new System.IO.FileStream("temp.txt", System.IO.FileMode.Create))
{
    // Fayl ilə işləmək
} // stream.Dispose() avtomatik çağrılacaq