2011-11-29 9 views
8

Yığın boşluğu biten bir java işleminden 1 GB yığın dökümü var. Ben bir java6 dağılımı ile gelen jvisualm içine yığın yükledim. Yaklaşık 16 saat önce "hesaplanmış boyutları hesapla" işlemini başlattım ve hala çalışıyor. 1GB yığınındaki en iyi 20 nesne için hesaplanmış boyutları hesaplamak ne kadar sürer? Hiç bitmesini beklemeli miyim?Görsel VM'de 1GB yığın için ne kadar uzun süre saklanan boyutlar hesaplanır?

+0

Ben (eğer bahsettiğini hiçbir fikrim yok: Bu günlük sonra

jvisualvm.exe -J-Xmx16g 

başlangıçta gösterir Java ile çok az deneyime sahibim, fakat mantığım bana 1 GHz'de 1 GB RAM (veya daha az) sistemle çalışmıyorsa, 16 saatin çok iyi olduğunu söyler ... – ComputerSaysNo

+0

Sadece merak için, öyle mi bitiş? Ne kadar zaman aldı? Eğer bitmedi, ikinci bir çalışma başarıyla tamamlandı mı? – uhm

+0

Hiç bitmedi. Bir YourKit denemesini indirdim ve aynı işlemi yaklaşık 20 dakika içinde bitirdim. – Joe

cevap

1

Elde edilen boyutların hesaplanması için yalnızca 900 CPU-dakika süren 600 MB'lık bir yığın vardı. 15 saat. Öbekte ne ile ilgili olduğunu varsayardım, bu yüzden yığınının üstüne çıkmayacağım (aynı zamanda bitirmediğine işaret ettin;), ama başka bir veri noktası.

4

Makinemde de sonsuza kadar sürecek gibi görünüyor, ancak artık hiçbir şey olmuyormuş gibi göründüğünden görev yöneticisinden fark ettim (düşük CPU uage, Disk I/O). Bunun nedeni, ilerleme göstergesinin bir animasyon göstermeye devam etmesine rağmen, eylemin günlük dosyasına göre sessizce durdurulmasıdır.

Bu adımları kullanılan kaydını açmak için:

:

  • tıklayın Yardımı
  • tıklayın Hakkında
  • tıklayın Günlük Dosyası

Bu günlüğün altındaki bana gösterdi

SEVERE [org.openide.util.RequestProcessor] 
java.lang.OutOfMemoryError: GC overhead limit exceeded 
    at java.util.HashMap.newNode(HashMap.java:1734) 
    at java.util.HashMap.putVal(HashMap.java:630) 
    at java.util.HashMap.put(HashMap.java:611) 
    at java.util.HashSet.add(HashSet.java:219) 
    at org.netbeans.lib.profiler.heap.DominatorTree.intersect(DominatorTree.java:279) 
    at org.netbeans.lib.profiler.heap.DominatorTree.computeOneLevel(DominatorTree.java:114) 
    at org.netbeans.lib.profiler.heap.DominatorTree.computeDominators(DominatorTree.java:64) 
    at org.netbeans.lib.profiler.heap.HprofHeap.computeRetainedSize(HprofHeap.java:537) 
    at org.netbeans.lib.profiler.heap.HprofHeap.computeRetainedSizeByClass(HprofHeap.java:594) 
    at org.netbeans.lib.profiler.heap.ClassDump.getRetainedSizeByClass(ClassDump.java:102) 
    at org.netbeans.modules.profiler.heapwalk.HeapFragmentWalker.computeRetainedSizes(HeapFragmentWalker.java:100) 
    at org.netbeans.modules.profiler.heapwalk.ClassPresenterPanel$1$1.run(ClassPresenterPanel.java:187) 
    at org.openide.util.RequestProcessor$Task.run(RequestProcessor.java:1393) 
[catch] at org.openide.util.RequestProcessor$Processor.run(RequestProcessor.java:2003) 

Varsayılan olarak 64 Java VM Heapsize, bilgisayarımın belleğinin% 25'ine (veya daha düşük bir VisualVM yerleşik limitine) sınırlı olacaktır. Böyle visualvm başlayan yeniden deneyin wil benim sonraki denemede için bu sorunu çözmek için:

Heap memory usage: initial 24,0MB maximum 14563,6MB 
+1

Ben zaten gelen -Xmx256m varsayılan bir değer çekerek beri jvisualvm, komut satırından mx komut satırı işaretini görmezden olduğunu bulduk% JDK_HOME% \ lib \ visualvm \ vb \ visualvm.conf. Https://stackoverflow.com/questions/9570921/how-do-i-provide-jvm-arguments-to-visualvm sayfasına bakın. –

İlgili konular