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).