我們有一個運行Java 5的長時間運行的服務器應用程序,並且通過分析我們可以看到,隨着時間的推移,老一代增長緩慢。它在一個完整的GC上正確釋放,但我希望能夠使用堆轉儲查看Eclipse MAT中不可訪問的對象。我已經使用+ XX:HeapDumpOnCtrlBreak成功獲得堆轉儲,但JVM在轉儲堆之前始終執行GC。顯然這不會發生在Java 6上,但現在我們被困在了5上。有什麼辦法可以防止這種情況發生?如何在不使用垃圾回收的情況下在Java 5上進行堆轉儲?
8
A
回答
1
我建議使用第三方分析器,例如YourKit,這可能允許您在不首先啓動GC的情況下拍攝快照。額外的獎勵,你可以在沒有整個ctrl-break shenanigans的情況下拍攝快照。
0
jProfiler(ej-technologies)可以做到這一點。
3
我這裏有一些代碼,可以編程採取堆轉儲在JMX:
在源代碼中的註釋包含2個鏈接到包含有關如何採取堆有用信息的文章轉儲。我不知道,但如果你運氣好,也許JMX的方法會有一些避免GC的方法。希望這可以幫助 !
+0
太好了,謝謝,我會去看看,看看它是否提前GC。實際上,以編程方式實現它似乎非常有用。 – Colin 2009-08-14 15:13:39
4
您是否嘗試過JDK附帶的標準jmap工具? 的JMAP收費用Java正式引入5.
實施例的命令行: /JAVA/bin中/ JMAP -heap:格式= B
結果可以使用標準工具與jHat或GUI應用程序進行處理如MAT。
9
使用jconsole或visualvm或jmc或...其他jmx管理控制檯。 在com.sun.management中打開HotSpotDiagnostic。 選擇方法dumpHeap和輸入兩個參數:
- 路徑轉儲文件
- (真/假)僅轉儲活動對象。使用
false
轉儲所有對象。
請注意,轉儲文件將由您連接到的JVM寫入,而不是由JVisualVM寫入,因此如果JVM在其他系統上運行,它將寫入該系統。
相關問題
- 1. 特定情況下的垃圾回收
- 2. Java垃圾回收5
- 3. 如何在不調用垃圾回收的情況下覆蓋ArrayList
- 4. Java中的內存使用情況和垃圾回收
- 5. Java:垃圾回收
- 6. java垃圾回收
- 7. java的垃圾回收Runnable
- 8. java - 垃圾回收
- 9. 不理解內存使用情況/垃圾回收
- 10. Java:垃圾回收
- 11. 我可以針對堆轉儲文件運行Java垃圾回收嗎?
- 12. 在這種情況下,BackboneJS ModelView何時會收集垃圾?
- 13. 單聲道垃圾回收最差情況下的性能
- 14. 以下情況稱爲java中的內存泄漏?這不是垃圾收集?
- 15. 垃圾收集器在這種情況下會做什麼?
- 16. 如何在不使用更新的情況下進行轉換
- 17. Erlang垃圾回收
- 18. Java:使用jlibs保證垃圾回收
- 19. 如何使用java旋律自動化垃圾回收執行?
- 20. Java垃圾回收器
- 21. 垃圾回收Java類
- 22. Java垃圾回收混淆
- 23. 角2,使用Javascript,內存使用情況和垃圾收集
- 24. 如何使Object類型的列表進行垃圾回收
- 25. vb.net垃圾回收
- 26. 如何在使用NIF時正確地進行垃圾收集
- 27. 在R中跟蹤內存使用情況和垃圾回收內容
- 28. 如何在Websphere中強制垃圾收集相關的堆轉儲?
- 29. C#垃圾回收
- 30. Chrome垃圾回收
謝謝,我其實有JProfiler的副本,但我沒有意識到這一點能做到這一點。我會放棄它。 – Colin 2009-08-14 14:59:40