2011-11-29 25 views
8

我有一個1 GB的Java堆進程轉儲堆空間。我已經將這個堆上傳到java6發行版附帶的jvisualm中。我在16小時前開始了「計算保留大小」過程,並且它仍在運行。運行1GB堆上的前20個對象的計算保留大小需要多長時間?我應該期待它完成嗎?在可視VM中爲1GB堆運行計算保留大小需要多長時間?

+0

我沒有你在說些什麼的想法(我對Java沒有什麼經驗),但是我的邏輯告訴我,如果你沒有在1 GHz的RAM上運行這個系統,那麼16個小時的Waaay太多了...... – ComputerSaysNo

+0

只是爲了好奇,是不是完?它花了多少時間?如果沒有完成,第二輪成功完成了嗎? – uhm

+0

它從來沒有完成。我最終下載了一個YourKit試用版,並在大約20分鐘內完成了相同的過程。 – Joe

回答

1

我有一個600MB的堆,只需要900 CPU分鐘的時間來計算保留大小。那是15個小時。我認爲它與堆中的內容非常相關,所以我不會推斷你的堆(也指出它沒有完成),但它是另一個數據點。

4

它似乎在我的機器上永遠佔用,但我從taskmanager注意到似乎沒有任何事情發生(低CPU使用率,磁盤I/O)。原因是雖然進度指示器一直顯示動畫,但根據日誌文件,動作已被無聲地中止。

要打開我用這些步驟的日誌:

  • 單擊幫助
  • 單擊關於
  • 點擊日誌文件

這表明我在日誌底部:

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) 

默認情況下,我的64位Java VM Heapsize將被限制在我的計算機內存的25%(或甚至更低的VisualVM內置限制)。爲了解決這個問題,我的下一個嘗試我西港島線嘗試再次啓動VisualVM的是這樣的:

jvisualvm.exe -J-Xmx16g 

此日誌後顯示在啓動時:

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

我發現jvisualvm忽略了命令行中的mx命令行標誌,因爲它已經從%JDK_HOME%\ lib \ visualvm \ etc \ visualvm.conf中提取了默認值-Xmx256m。見https://stackoverflow.com/questions/9570921/how-do-i-provide-jvm-arguments-to-visualvm –