2010-12-16 17 views
8

Bu soru HotSpot generations kapsamında sınırlanmıştır. Belirli bir durumun hangi nesilde yaşadığını program aracılığıyla öğrenmenin bir yolu var mı?Bir örnekte hangi GC neslinin yaşadığını programlı olarak bulabilir miyim?

  • Young veya eski nesil Aşağıdakiler gibi veriler?
  • Gençler hangi hayatta kalır?
  • TLAB İçinde? Hangi iplik? (. Ex, BTrace, JVMTI)

Herhangi bir teknik Böyle bir şey yapabiliriz sürece çalışır:

Dilenciler seçim olamaz ama zaman örnek ideal olarak ben de öğrenebilirler
Object x = new Object(); 
HotSpotGenerationInfo info = HotSpotGenerationUtil.getInfo(x); 

cevaplarında

ilgilenmiyorum - faiz o (. yoklama örtülü gecikme & yükü ilgilenmiyor yani olay geri arama bazlı) olur anda başka bir nesilden taşınıyor edildi O sadece "hayır" gerekçe :) olmadan

+1

Neden bununla ilgileneceğinizi merak ediyorum. Tabii ki saf bir meraktan başka bir şey de yok :) – drekka

+0

Muhtemelen yapılamaz çünkü a) kaynakların daha pahalı olmasını sağlar ve b) hiç kimse bunu yapmak için iyi bir şey bulamaz. Belki de iyi bir kullanımınız var ve ortaya çıkarabilir? –

+0

bir gen0 koleksiyonunu gerçekleştiren hayatta kalan tüm nesneler Gen1 veya daha yüksek, ve bir Gen1 veya gen2 toplama hayatta kalan tüm nesneler gen2 veya daha yüksek olduğunu ima eder ve ima ederse sistem belirten her nesne için birkaç bayraklarını devam ederse olup olmadığını bir gen0 veya Gen1 koleksiyon Nesnenin en son değiştirilmesinden bu yana gerçekleştirilmiştir, sistem, gen0 veya gen1 koleksiyonunu gerçekleştirirken, nesnenin herhangi bir gen0 veya gen1 referansı bulundurmadığını bilecektir. Çok kullanışlı bir optimizasyon. – supercat

cevap

4

olarak bildiğim kadarıyla, doğrudan bir nesne şu anda yaşadığı hangi bellek havuzu sorgulamak söylüyorlar. Ancak nesneler çöp toplama koşuyla başka bir hafıza havuzuna terfi, VM, JMX kullanarak başladığından beri büyük/küçük gc çalıştırma sayısını sorgulayabilirsiniz. Nesne oluşturulduğunda, bu sayaçlara ek olarak not düşerseniz, nesneyi hangi havuzdan geçirdiğinden itibaren bir GC'nin olup olmadığını yeniden oluşturabilirsiniz.

3

"Bu nedenle, GC'lerin sayısını saymak için ek bir sorun var. Nesne "yaklaşım" oluşturuldu - erken nesne tanıtımı dikkate almaz. Sağ kalan boşluklar temel olarak çok küçükse ve Eden'den gelen hafıza basıncı (yani, en az bir kez hayatta kalan nesnelerin oranı) yüksekse, nesneler, tam zimmet eşiğini vurmadan önce kiracıya terfi ettirilecektir.

gerçek örneklerde, sağlıklı uygulamalar genellikle erken promosyon sıfır olmayan yüzdeleri vardır. Aslında,% 0 zamansal promosyon oranı gerçekten kötü bir işarettir - hayatta kalanlarınızın çok fazla büyük olduğunu ve çok fazla bellek harcadığını söylüyor.

İlgili konular