Çöp toplayan bir programlama dilinde belirtilen en kötü durumlu veri yapılarının çalışma süresi analiz edilirken GC maliyeti ihmal edilebilir mi?


22

Ben sadece sorumun cevabının "evet" olduğunu varsaydığımı fark ettim ama iyi bir nedenim yok. Belki de sadece en kötü durumdaki yavaşlamayı kanıtlayan bir çöp toplayıcı olduğunu hayal ediyorum . Alıntılayabileceğim kesin bir referans var mı? Benim durumumda tamamen işlevsel bir veri yapısı üzerinde çalışıyorum ve bu detaylar önemliyse, Standart ML kullanıyorum.O(1)

Ve belki de bu soru, Java'da belirtilen veri yapılarına uygulandığında daha da anlamlı olacaktır. Belki de algoritmalar / Java kullanarak Java veri kullanan ders kitaplarında bazı tartışmalar var? (Sedgewick’in Java sürümü olduğunu biliyorum, ancak yalnızca C sürümüne erişimim var.)

Yanıtlar:


17

Evet, gc sabit zaman itfa edilmektedir. Diyelim ki için çalışan ve k boyutunda bir pik çalışma kümesiyle çalışan bir algoritmaya sahipsin . Şimdi, programın çalışması sırasında en fazla O ( n ) kelimesi tahsis edebileceğinizi ve bir kopya toplayıcı çalıştırmanın zaman maliyetinin O ( k ) olduğunu unutmayın (yani, bir gc'nin maliyeti toplamla orantılıdır). canlı veri miktarı). Bu nedenle, gc'yi en fazla O ( n / k ) defa çalıştırırsanız, toplam çalışma zamanı maliyeti O ( n ) ile sınırlandırılır.nkO(n)O(k)O(n/k)O(n)bu, gc'nin itfa edilmiş maliyetinin sabit olduğu anlamına gelir. Bu nedenle, Cheney tarzı bir koleksiyoncunuz varsa, her yarı bölmenin boyutu , o zaman tam bir koleksiyonun her n / k adımda bir defadan fazla kullanılamayacağını görmek kolaydır , çünkü k kelimelerini ayırmak O ( k ) olur. zaman ve çalışma seti asla istediğiniz büyüklüğü veren k boyutunu geçemez . Bu, gc sorunlarını yok saymayı haklı kılar.2kn/kkO(k)k

Bununla birlikte, gc varlığının veya yokluğunun göz ardı edilemez olduğu bir durum kilitsiz veri yapıları yazmaktır. Birçok modern kilitlenmemiş veri yapısı kasıtlı olarak bellek sızdırıyor ve doğruluk için gc'ye güveniyor. Bunun nedeni, yüksek düzeyde, çalışma şeklinin, bazı verileri kopyalamak, üzerinde bir değişiklik yapmak ve bunu bir CAS komutuyla atomik olarak güncellemeye çalışmak ve bunu CAS başarılı olana kadar bir döngüde çalıştırmaktır. Bu algoritmalara deterministik deallocation eklemek, onları çok daha karmaşık hale getirir ve bu yüzden insanlar sık ​​sık rahatsız olmaz (özellikle Java benzeri ortamlarda hedeflendiklerinden).

EDIT: Eğer itfa edilmemiş sınırlar istiyorsanız, Cheney toplayıcısı bunu yapmayacaktır - her çalıştırıldığında tüm canlı setini tarar. Google için anahtar kelime "gerçek zamanlı çöp toplama" ve Djikstra ve ark. Steele ilk gerçek zamanlı işaretleme ve toplama koleksiyonerlerini verdi ve Baker ilk gerçek zamanlı sıkıştırma gc'sini verdi.

@ makale {dijkstra1978fly,
  title = {{Anında çöp toplama: İşbirliği içinde bir egzersiz}},
  yazar = {Dijkstra, EW ve Lamport, L. ve Martin, AJ ve Scholten, CS ve Steffens, EFM},
  dergi = {ACM'nin İletişimi},
  hacim = {21},
  Sayısı = {11},
  sayfalar = {966--975},
  ISSN = {0001-0782},
  yıl = {1978},
  yayımcı = {ACM}
}

@ makale {steele1975multiprocessing,
  title = {{Çok işlemcili küçükleştirici çöp toplama}},
  yazar = {Steele Jr, GL},
  dergi = {ACM'nin İletişimi},
  hacim = {18},
  Sayısı = {9},
  sayfalar = {495--508},
  ISSN = {0001-0782},
  yıl = {1975},
  yayımcı = {ACM}
}

@ makale {baker1978list,
  title = {{Seri bilgisayarda gerçek zamanlı olarak listeleme işlemi}},
  yazar = {Baker Jr, HG},
  dergi = {ACM'nin İletişimi},
  hacim = {21},
  Sayısı = {4},
  sayfalar = {280--294},
  ISSN = {0001-0782},
  yıl = {1978},
  yayımcı = {ACM}
}

abab

1
"Evet, gc sabit süre itfa edildi". Bu genel olarak doğru değil. GC'nin olabileceğini iddia edebilirsiniz , ancak bunlar mutlaka değildir ve gerçek olanlar kesinlikle değildir. Örneğin, List.mapOCaml'daki naif , aslında kuadratik karmaşıklıktır çünkü yığın derinliği doğrusaldır ve yığın her çocuk yuvasına boşaltıldığında geçer. Aynı büyük işaretçiler dizileri karşılaşan büyük dilimler için de geçerli.
Jon Harrop,

12

O(n)

O(1)

Kesin çöp toplama referansı:

  • Richard Jones ve Rafael Lin'in Çöp Toplaması

Ben Zorn , farklı çöp toplama algoritmalarının gerçek maliyetlerini ölçmek için bazı çalışmalar yaptı ;

Daha fazla görmek için:

  • Birleşik bir çöp toplama teorisi , Bacon, Cheng ve Rajan, Nesne Yönelimli Programlama, Sistemler, Diller ve Uygulamalar ACM Konferansı, Vancouver, BC, Kanada, ss. 50-68, 2004.
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.