Nesil çöp toplayıcıları doğal olarak önbellek dostu mudur?


38

Tipik bir kuşak çöp toplayıcısı , son zamanlarda ayrı bir hafıza bölgesinde tahsis edilmiş verileri tutar. Tipik programlarda, çok fazla veri kısa ömürlüdür, bu nedenle sık sık genç çöplerin toplanması (küçük bir GC döngüsü) ve sık sık eski çöplerin toplanması, bellek yükü ile GC yapmak için harcanan zaman arasında iyi bir uzlaşmadır.

Sezgisel olarak, tek bölgeli bir kollektöre kıyasla kuşak çöp toplayıcısının yararı, ana bölgedeki gecikme oranı arttıkça, genç bölgedeki verilere sıkça erişildiği ve hepsinde bir yerde tutulduğu için artması gerekir. Deneysel sonuçlar bu sezgiyi destekliyor mu?


soruya uygun etiketler hakkında ilgili bir meta tartışma .
Kaveh

Yanıtlar:


19

Kuşak çöp toplayıcılarının önbellek etkileri hakkında konuşan birkaç makale:

Toplayabildiğim kadarıyla, temel sorun, toplanan çöp sistemlerinin, önden toplanmayı önlemek için bellekte yer kaplamasıdır. Aynı şey önbellek için de geçerlidir. Sizin de belirttiğiniz gibi, ilk nesildeki şeyler büyük olasılıkla önbellekte oturacak ve tahsisleri ve toplanmaları ana bellekteki bir şeyden çok daha hızlı olacak ya da diske kaydedilmiş olacaktır. Başlıca sorun, önbellek boyutuna göre ilk neslin boyutudur. Eğer önbellek ilk nesilden önce dolarsa, o zaman özler birikmeye başladığında bu avantajları kaybetmeye başlarsınız.


10

Bazı açıklamalarda belirtilebilecek tüm çöp toplayıcıların çok zor bir yanı vardır ve bu da "tam tarama" veya "tam toplama" dır. Periyodik olarak, rasgele, aralıklı olarak tüm nesneleri taramak zorundadırlar. kuşak toplayıcıları tam taramanın ertelenmesinde ve süresinin en aza indirilmesinde daha iyidir, ancak yine de gereklidir.

Nesil toplayıcı bazen "kreş" alanı olarak adlandırılan şeye odaklanacak, ancak sonunda / kaçınılmaz olarak "eski" kuşak alanında toplayarak tam bir hafıza taramasına neden olacak.

Bu tam tarama, neredeyse tüm bellek önbellekleme ve (özellikle!) Sanallaştırma şemaları ile uyumsuzdur, bu anlamda neredeyse tüm bellek önbellekleme / sanallaştırma şemaları bu durumda herhangi bir performans geliştirmede kötü bir şekilde başarısız olur / başarısız olur.

Dolayısıyla, bu sorunun temel cevabı, tam taramanın ne kadar sıklıkla tetiklendiği ve bunun ne zaman gerçekleştiği ve ne zaman tolere edilebileceği konusundaki etkisinin ne kadar "kötü" olduğu. Bu, daha fazla uygulamaya bağlı bir özellik / soruya yol açar.

Başka bir deyişle, toplayıcının işleyişinin "çoğu" için bir önbellek muhtemelen yardımcı olacaktır (önbellek ve "genç" kreş alanı genellikle üst üste gelecektir!), Ancak periyodik, aralıklı, sonunda, kaçınılmaz, ağır, "eski nesil" alan tam olarak toplandığında ve önbellek "isabet oranı" tamamen kötü bir döngü içinde alındığından, belki de "eski nesil" alan tam olarak toplandığında ve "darbe hızı" çok kötü bir şekilde düşerse, “büyük” [aşağılayıcı] yükselmeye başlayabilir tarama / toplama döngüsü. Başka bir deyişle, kaçınılmaz bir periyodik devamsızlık (istatistiksel tahminlerin / ortalamaların / performans trendlerinin vb. Yanıltıcı ve uygulanabilir olmadığı).

Şu anda ortaya çıkan şey, temel bellek yönetim sistemlerine (önbellekleme / sanallaştırma) dayanmak üzere tasarlanan bazı yeni toplama sistemleridir. Ayrı bellek toplama, önbellekleme ve sanallaştırma sistemlerini tamamen ayıran tarihsel yaklaşımların, her üç yönü de birleştiren / bütünleştiren / ele alan yaklaşımların yanı sıra performans göstermeyeceği ortaya çıkmıştır.

Örneğin , Zhou ve Demsky’den önbellek tanıyan çöp toplama.


Yani kuşak GC'lerin kuşak olmayan (klasik) olanlara göre önbellek dostu olduğunu iddia edebilir misiniz ?
Raphael

GC'nin, mevcut mimarilerde zor olan tasarımının bir parçası olarak önbellek ve sanal bellek ile entegre bir şekilde tasarlanması gerektiğini savunuyorum. bununla birlikte cevabı genişletmek için - evet nesiller toplayıcıları sık kullanılan nesneleri, sık sık ve nadiren kullanılan nesnelerin dağıldığı / birbirine karıştığı diğer tasarımlardan doğal olarak daha fazla önbellek uyumlu olacak şekilde bitişik belleğe toplar / konsolide eder / gruplandırır hala bazı önbellek avantajına sahip olacak).
saat

1
GC'yi ve önbellekleme / sanallaştırma mimarilerini birleştirmenin biraz zorlu yönü, bu tür mimarilerin genellikle bellek sayfalarının içeriğini umursamadıkları, ancak bir GC sisteminde olması gereken şeylerdir. Farklı diller bazen programcılara GC ile ilgili farklı özellikler vaat eder ve bir işletim sistemi düzeyinde hangi özelliklerin destekleneceğini bulmak zor olabilir. En iyi yaklaşım, muhtemelen, her bir nesnenin, başlangıç ​​alanları işletim sistemi tarafından tanımlanan, ancak işletim sisteminin bilmeyeceği veya umursamadığı dile özgü veriler tarafından takip edilebilecek bir yapıya bir işaretçi içermesi gerektiğini söyleyecektir.
Supercat,
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.