Middle
Dart'taki çöp toplayıcı hakkında ne biliyorsun?
sobes.tech yapay zeka
AI'dan gelen yanıt
Dart, tek iş parçacıklı bir çöp toplayıcı kullanır ve bu, kuşaklı toplama (kuşaklı çöp toplama) tabanlıdır.
Ana özellikler:
- Kuşaklı Toplama: Nesneler iki kuşağa ayrılır:
- Genç kuşak: Yeni ve kısa ömürlü nesneler. Sık sık toplanır.
- Yaşlı kuşak: Uzun ömürlü nesneler, genç kuşakta birkaç toplanmayı atlatmış olanlar. Daha az sıklıkla toplanır.
- Durdur-Dünya: Çöp toplama işlemi sırasında programın (Dart İzolatları) yürütülmesi durdurulur. Ancak, tek iş parçacıklı ve optimizasyonlar sayesinde gecikmeler en aza indirilir.
- İşaretle ve Temizle: Yaşlı kuşakta Mark-and-Sweep algoritması kullanılır. Önce erişilebilir nesneler işaretlenir, sonra erişilemeyenler silinir. Genç kuşakta ise, hızlıca canlı nesneleri başka bir bellek alanına taşıyan Copying Collector algoritması kullanılır.
- Çöp toplamada döngü yok: Geliştirici, belleği manuel olarak yönetmek veya GC'yi çağırmak zorunda değildir. Sistem otomatik olarak yapar.
- Optimizasyonlar: Fonksiyonların inline edilmesi, türlerin özelleştirilmesi ve nesnelerin yığında tahsis edilmesi gibi işlemler, çöp toplayıcının üzerindeki yükü azaltır.
Örneğin, yeni bir nesne oluştururken:
// "Genç" kuşakta yeni bir nesne oluşturma
var myObject = MyClass();
Eğer myObject uzun süre bellekte kalır ve erişilebilir olursa, zamanla "yaşlı" kuşağa taşınacaktır. Erişilebilirliği sona ererse, çöp toplayıcı onu zamanla serbest bırakacaktır.
// myObject artık erişilebilir değil, çöp toplayıcı tarafından toplanabilir
myObject = null;
Dart'taki çöp toplayıcının verimli olduğunu anlamak önemlidir, ancak bu, artık ihtiyaç duyulmayan nesnelere güçlü referanslar tutulduğunda (örneğin, iptal edilmemiş abonelikler) oluşabilecek bellek sızıntılarına karşı bir panacea değildir.