Sobes.tech
Middle+

Çıxıntı yığan (Garbage Collector) metodları haqqında danışın.

sobes.tech Süni İntellekt

AI-dan cavab

Qabza tozalayıcı, proqram tərəfindən artıq istifadə olunmayan obyektlərin tutduğu yaddaşı azad edən avtomatik yaddaş idarəetmə prosesidir.

Qabza tozalayıcısının əsas işləmə metodları:

  1. İstinad sayğacı:

    • Hər bir obyektin onun üçün olan istinadların sayını saxlayan sayğacı var.
    • Obyektə istinad yaradıldıqda, sayğac artır.
    • İstinad yox olduqda (məsələn, dəyişən sahədən çıxanda), sayğac azalır.
    • Sayğac sıfıra çatdıqda, obyekt əlçatmaz sayılır və onun yaddaşı azad edilir.
    • Məsələlər: Döngüvi istinadları idarə edə bilməz, iki və ya daha çox obyekt bir-birinə istinad edərsə, lakin xaricdən əlçatmaz olarsa.
  2. İzləyiçi (Tracing) qabza tozalayıcı:

    • İki mərhələdə işləyir: işarələmə və tarama və ya sıxışdırma.
    • İşarələmə mərhələsi: "Kök" (root set) - obyektlərdən başlayır ki, onlar mütləq əlçatandır (məsələn, qlobal dəyişənlər, yığın obyektləri). GC bütün köklərdən əlçatan olan obyektləri keçir və onları "canlı" kimi işarələyir.
    • Tarama mərhələsi: GC bütün yığını yoxlayır. İşarələnməyən obyektlər "zibil" sayılır və yaddaşları azad edilir.
    • Sıxışdırma (istəyə bağlı): Tarama sonrası, GC "canlı" obyektləri hərəkət etdirə bilər, yaddaş parçalanmasını aradan qaldırmaq üçün.
    • Üstünlüklər: Döngüvi istinadları idarə edə bilər.
    • Çatışmazlıqlar: Proqramın icrasında fasilələrə səbəb ola bilər (stop-the-world), GC işləyərkən.

Ən çox istifadə olunan izləyiçi qabza tozalayıcı alqoritmlər:

  • Mark-and-Sweep: Canlı obyektləri işarələyir və sonra zibil toplayır.
  • Mark-and-Compact: Canlı obyektləri işarələyir və onları defragmentasiya üçün hərəkət etdirir.
  • Copying: Yığını iki hissəyə bölür. Toplama zamanı, GC canlı obyektləri bir hissədən digərinə köçürür və sonra orijinal hissəni azad edir.
  • Nəsilsel: Əksər obyektlərin gənc yaşda öldüyü hipotezinə əsaslanır. Yığın nəsillərə bölünür (məsələn, gənc və yaşlı). GC daha tez-tez gənc nəsildə toplanır, bu da daha qısa fasilələrə səbəb olur.

Qabza tozalayıcısının konkret işləmə metodu istifadə olunan proqramlaşdırma dilinə və onun tətbiqinə bağlıdır. Məsələn, Java və C# müxtəlif nəsil toplayıcı variantlarından istifadə edir, o cümlədən nəsilsel. Python ənənəvi olaraq Referans Sayımı istifadə edir və döngüvi istinadları aşkar etmək üçün əlavə mexanizmlər var; daha yeni versiyalarda isə izləyiçi elementlər də istifadə olunur.