本文介绍如何在Java VisualVM中查看内存分配堆栈跟踪:http://rejeev.blogspot.de/2009/04/analyzing-memory-leak-in-java.html
简而言之,在Java VisualVM选项中定义自定义预设,并选中内存设置选项卡中的"记录分配堆栈跟踪"复选框.
现在,当我选择自定义预设并启动内存分析时,我仍然无法查看内存分配堆栈跟踪.没有右键单击项目操作"拍摄快照并显示分配堆栈跟踪",如文章中所述,也没有类似的内容.我正在使用VisualVM 1.7.
如何查看这些分配堆栈跟踪?
我正在调查hprofVisualVM中的文件
服务器正在运行JDK 1.4.2_30并且具有1 GB堆,NewSize为200 Mb.
hprof显示由56000个实例占用的堆的71%,int[]并且当在VisualVM中查看时,这些56K阵列中没有一个具有引用
按照我们的说法,如果没有"参考",这应该是垃圾收集.所以问题是:
a)有没有办法找出这些参考文献?
b)这是一个不正确的快照 - 即采取堆转储的操作是否做了某种GC?
c)我们应该在VisualVM中查看"保留大小"对象吗?
作为更新 - 我们仍然不知道它们int[]是什么,但是下一个最大的对象是Pool中的Weblogic内部EJB引用,并且我们在其中一个中发现了一个不正确的设置,它将内存使用率降低了30%来自早期频繁的Full GC