Sobes.tech
Middle+

Dart'ta çöp toplayıcısının hangi özellikleri vardır?

sobes.tech yapay zeka

AI'dan gelen yanıt

Dart'taki çöp toplayıcı, Jenerasyonel Çöp Toplama (Generational Garbage Collection) algoritmasını kullanır.

Ana özellikler:

  • Jenerasyonlar: Nesneler iki jenerasyona ayrılır:
    • Genç Jenerasyon: Burada yeni nesneler oluşturulur. Bu jenerasyonda çöp toplama daha hızlı ve daha sık gerçekleşir, çünkü çoğu nesne oluşturulduktan kısa süre sonra ölür.
    • Yaşlı Jenerasyon: Birkaç genç jenerasyon çöp toplama döngüsünden sonra hayatta kalan nesneler buraya taşınır. Bu jenerasyonda çöp toplama daha az sıklıkta ve daha uzun sürer.
  • Hayatta kalanlar: Genç jenerasyondaki, diğer nesnelerin referans verdiği nesneler "hayatta kalan" olarak kabul edilir ve yaşlı jenerasyona taşınabilir.
  • Çöp toplama aşamaları:
    • Küçük Çöp Toplama (Minor GC): Sadece genç jenerasyondaki nesneleri etkileyen hızlı çöp toplama.
    • Büyük Çöp Toplama (Major GC): Daha uzun süren ve yaşlı jenerasyondaki nesneleri kontrol eden çöp toplama.
  • Jenerasyonel çöp toplamanın avantajları:
    • Kısa ömürlü nesneler için optimize edilmiştir: Çoğu çöp, genç jenerasyondan hızla kaldırılır.
    • Duraklama sürelerini azaltır: Genç jenerasyon için sık, kısa duraklamalar, tüm yığın için nadir ama uzun duraklamalardan daha az fark edilir.
  • Dart VM çöp toplayıcı:
    • Kopyalama (copying collector) ve işaretleme ve sıkıştırma (mark-and-sweep/compact) yöntemlerini birleştiren hibrit bir yaklaşım kullanır.
    • Genç jenerasyondaki kopyalama toplayıcı, canlı nesneleri hızla başka bir bellek alanına taşır ve mevcut alanı verimli şekilde serbest bırakır.
    • Yaşlı jenerasyonda işaretleme ve sıkıştırma, canlı nesneleri bulur ve onları hareket ettirerek bellek parçalanmasını giderir.
    • Kullanıcı arayüzü iş parçacıklarından bağımsız çalışır, kilitlenmeleri en aza indirir.
// Genç jenerasyona yerleştirilecek nesnelerin oluşturulmasına örnek
class MyClass {
  String name;
  MyClass(this.name);
}

void main() {
  var obj1 = MyClass("Nesne 1"); // Genç jenerasyonda oluşturulur
  var obj2 = MyClass("Nesne 2"); // Genç jenerasyonda oluşturulur

  // Nesneler referanslar tarafından tutulmuyorsa, toplanabilirler
  // bir sonraki genç jenerasyon çöp toplamasında.

  // Bu nesneler uzun süre yaşar ve referanslara sahipse,
  // yaşlı jenerasyona taşınabilirler.
}