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:
- İş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.
- 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.
- 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(),usingbə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