我有一个应用程序使用了比预期的短期对象更多的东西,这导致了我需要解决的重大性能问题。为了让您了解问题的严重程度,在垃圾收集再次运行之前,伊甸园空间在10秒内从大约200mb跳到1800mb,并使Eden重新向下。我在GC之后进行了2次堆转储,在下次运行之前进行了一次堆转储。我想分析这些并查看未引用的对象是什么,所以我可以找到问题的根源,但是,当我将堆转储加载到eclipse或netbeans时,两者似乎都删除了与未引用对象关联的数据,只是显示当时应用程序中引用的200mb引用对象。有没有人知道我分析堆转储的工具/方式,看看未引用的对象是什么?
谢谢,
詹姆斯
答案 0 :(得分:2)
上次我调试了这个问题时,我使用http://www.yourkit.com/给了我很多帮助。
答案 1 :(得分:1)
我不知道分析堆转储的工具,但jdk发行版附带的jvisualvm有一个相当不错的内存分析器,我用来调试类似的问题。它应该在你的jdk bin目录中。
答案 2 :(得分:1)
我已经能够使用IBM Heap Analzyer
跟踪许多与堆相关的问题但我想你必须运行IBM SDK才能使用它,但也许值得一试?
答案 3 :(得分:1)
Unreachable Objects histogram中的Eclipse Memory Analyzer可以帮助您。您也可以尝试按照常见问题解答中的说明启用-keep_unreachable_objects
。