Middle
Tullantıların toplanması metodları (Garbage Collector) haqqında danışın.
sobes.tech Süni İntellekt
AI-dan cavab
Tullantıların toplanması metodları:
- İstinad Sayımı (Reference Counting): Hər obyekt özünə istinad sayını saxlayır. Sayı sıfıra çatanda, obyekt tullantı sayılır və silinir.
- Üstünlüklər: Sadə, əsas proqramın icrasını uzun müddət dayandırmır.
- Mənfi cəhətlər: Döngüvi istinadları idarə edə bilmir; hər obyekt üçün əlavə yer tələb edir.
- İzləyiş Tullantı Toplayıcılar (Tracing Garbage Collectors): "Kök" obyektlər toplusu ilə başlayır (məsələn, aktiv dəyişənlər, çağrı yığını) və bu köklərdən bütün əlçatan obyektləri rekursiv şəkildə keçir. Əlçatan olmayan obyektlər tullantı sayılır.
- Əsas izləyiş strategiyaları:
- İşarələmə və təmizləmə (Mark and Sweep):
- İşarələmə (Mark): Obyekt qrafikində gəzinti, əlçatan bütün obyektləri işarələyir.
- Təmizləmə (Sweep): İkinci keçiddə, işarələnməyən obyektləri silir.
- Mənfi cəhətlər: Yaddaşın parçalanması.
- İşarələmə və sıxışdırma (Mark and Compact):
- İşarələmə (Mark): Mark and Sweep ilə eynidir.
- Sıxışdırma (Compact): Canlı obyektləri hərəkət etdirərək ardıcıl yerləşdirir və parçalanmanı aradan qaldırır.
- Mənfi cəhətlər: Daha mürəkkəb, proqramın dayandırılmasını tələb edə bilər.
- Kopyalama (Copying): Yaddaşı iki sahəyə bölür (yarım sahələr). Hər tullantı toplama dövründə, bir sahədəki canlı obyektlər digərinə köçürülür. Sonra, köhnə sahə tamamilə təmizlənir.
- Üstünlüklər: Parçalanma yoxdur, toplama sonrası yaddaşın sürətli ayrılması.
- Mənfi cəhətlər: İstifadə olunan yaddaşın iki qat çox olması.
- İşarələmə və təmizləmə (Mark and Sweep):
- Əsas izləyiş strategiyaları:
- Nəsil Tullantı Toplama (Generational Garbage Collection): Əksər obyektlərin qısa ömürlü olduğu hipotezinə əsaslanır. Yaddaş nəsillərə bölünür (gənc, köhnə). Obyektlər yaradıldıqda, gənc nəsiyə yerləşdirilir. Əgər obyekt bir neçə toplama zamanı sağ qalarsa, köhnə nəsiyə keçir. Gənc nəsildə toplama daha tez-tez baş verir.
- Üstünlüklər: Effektivdir, çünki işin çox hissəsi gənc nəsidə az məlumatla həyata keçirilir.
- Mənfi cəhətlər: Köhnə nəsil obyektlərindən gənc nəsil obyektlərinə istinadların izlənməsi tələb olunur (qeyd kartları və ya digər mexanizmlər).
Dil nümunələri və onların GC-ləri:
- Python: İstinad sayımı (döngüsel istinadlar üçün döngüsel toplama ilə).
- Java, C#: Nəsil, Mark and Sweep, Mark and Compact, Kopyalama (fərqli variantlar və kombinasiyalar, JVM/.NET versiyasına və tənzimləmələrinə görə).
- Go: Eyni zamanda, nəsilsiz, optimallaşdırılmış Mark and Sweep ilə.