Sobes.tech
Middle

Dart-də çirkli toplayıcı haqqında nə bilirsiniz?

sobes.tech Süni İntellekt

AI-dan cavab

Dart tək ipli çöp toplayıcıdan istifadə edir və bu, nəsil toplama (generational garbage collection) əsasında işləyir.

Əsas xüsusiyyətlər:

  • Nəsil toplama: Ob'ektlər iki nəsilə bölünür:
    • Gənc nəsil: Yeni və qısa ömürlü ob'ektlər. Tez-tez toplanır.
    • Köhnə nəsil: Uzunömürlü ob'ektlər, gənc nəsildə bir neçə toplanmadan keçmişdir. Daha az tez toplanır.
  • Stop-the-World: Çöp toplanmasını həyata keçirmək üçün proqramın icrası (Dart Isolates) dayandırılmalıdır. Ancaq, tək ip və optimizasiyalar sayəsində gecikmələr minimal olur.
  • Mark-and-Sweep: Köhnə nəsildə Mark-and-Sweep algoritmi istifadə olunur. Əvvəlcə əlçatan ob'ektlər işarələnir, sonra əlçatan olmayanlar silinir. Gənc nəsil üçün isə, canlı ob'ektləri sürətlə başqa yaddaş sahəsinə köçürən Copying Collector algoritmi istifadə olunur.
  • Çöp toplanmasında döngələr yoxdur: İnkişaf etdirici yaddaşı əl ilə idarə etməli və ya GC-ni çağırmalı deyil. Sistem bunu avtomatik edir.
  • Optimizasiyalar: Funksiyaların inline edilməsi, tiplərin ixtisaslaşdırılması və ob'ektlərin yığımda yerləşdirilməsi daxil olmaqla, çöp toplayıcısının yükünü azaldır.

Məsələn, yeni ob'ekt yaradarkən:

// Gənc nəsil yaddaşında yeni ob'ekt yaradılması
var myObject = MyClass();

Əgər myObject uzun müddət yaddaşda qalır və əlçatan olursa, zamanla o, "köhnə" nəsilə köçürüləcək. Əgər əlçatanlığı itərsə, çöp toplayıcı onu vaxtında azad edəcək.

// myObject artıq əlçatan deyil, çöp toplayıcı onu toplaya bilər
myObject = null;

Dart-ın çöp toplayıcısının səmərəli olduğunu başa düşmək vacibdir, lakin bu, artıq lazım olmayan obyektlərə güclü istinadların saxlanması ilə yaranan yaddaş sızıntılarına qarşı panacea deyil (məsələn, ləğv edilməmiş abunələr).