JVM'nin "java.lang.OutOfMemoryError: GC ek yük sınırı aşıldı" atışı için kullandığı örnekleme süresi nedir? GCTimeLimit ve GCHeapFreeLimit parametreleriyle% 98 ve% 2'yi kontrol edebileceğinizi biliyorum, ancak örnekleme süresi nedir?
Yanıtlar:
Gönderen Java SE 6 HotSpot [tm] Sanal Makine Çöp Toplama Tuning
aşağıdaki
Aşırı GC Süresi ve OutOfMemoryError
Çöp toplamada çok fazla zaman harcanıyorsa, eşzamanlı toplayıcı bir OutOfMemoryError atar: Toplam sürenin% 98'inden fazlası çöp toplamada harcanırsa ve yığının% 2'sinden azı kurtarılırsa, bir OutOfMemoryError atılır. Bu özellik, yığın çok küçük olduğundan uygulamaların çok az ilerleme kaydederken veya hiç ilerleme kaydetmeden uzun bir süre çalışmasını engellemek için tasarlanmıştır. Gerekirse, bu özellik komut satırına -XX: -UseGCOverheadLimit seçeneği eklenerek devre dışı bırakılabilir.
Politika, paralel toplayıcıdakiyle aynıdır, tek fark, eşzamanlı koleksiyonları gerçekleştirmek için harcanan sürenin% 98'lik zaman sınırına dahil edilmemesidir. Başka bir deyişle, yalnızca uygulama durdurulduğunda gerçekleştirilen toplamalar, aşırı GC süresine sayılır. Bu tür koleksiyonlar tipik olarak bir eşzamanlı mod hatası veya açık bir toplama talebinden (ör. System.gc () çağrısı) kaynaklanır.
daha aşağı bir geçit ile birlikte
Açık çöp toplamanın en sık karşılaşılan kullanımlarından biri, RMI'lar dağıtılmış çöp toplama (DGC) ile gerçekleşir. RMI kullanan uygulamalar, diğer sanal makinelerdeki nesnelere atıfta bulunur. Yerel yığın ara sıra toplanmadan bu dağıtılmış uygulamalarda çöp toplanamaz, bu nedenle RMI düzenli olarak tam koleksiyonları zorlar. Bu koleksiyonların sıklığı özelliklerle kontrol edilebilir. Örneğin,
java -Dsun.rmi.dgc.client.gcInterval=3600000
-Dsun.rmi.dgc.server.gcInterval=3600000
dakikada bir varsayılan hız yerine saatte bir açık toplama belirtir. Ancak bu, bazı nesnelerin geri kazanılmasının çok daha uzun sürmesine de neden olabilir. Bu özellikler, DGC etkinliğinin zamanındalığına ilişkin bir üst sınır isteği yoksa, açık koleksiyonlar arasındaki zamanı etkili bir şekilde sonsuz yapmak için Long.MAX_VALUE kadar yüksek ayarlanabilir.
Görünüşe göre% 98'i belirlemek için değerlendirme süresi bir dakika uzunluğundadır, ancak Sun'ın JVM'sinde doğru tanımla yapılandırılabilir.
Elbette başka yorumlar da mümkündür.
-XX:+DisableExplicitGC
o RMI ilgili yapılandırmayı etkilemeyecek ve sistem parametresi ile frekans setinde gc çağıracağı-Dsun.rmi.dgc.server.gcInterval
-Dsun.rmi.dgc.server.gcInterval
Özelliğin Java 1.2'den beri var olduğunu unutmayın .