VisualVM - 查找对类的所有引用

时间:2013-01-15 15:51:41

标签: java memory-leaks visualvm

我正在尝试调试应用程序中的permgen错误。我正在运行VisualVM来分析应用程序,并采取了内存快照的堆转换。

将快照加载到VisualVM中进行分析,我现在可以在类列表中看到几个出现多次的类,全部列出0个实例,0个大小 - 我只期望每个类中的一个(可能链接到它的类加载器) - 有没有办法确定什么仍然保持对没有实例的这些类的引用?很高兴使用其他工具,如果我可以加载转储(.hprof)来分析持有引用的内容。

谢谢!

2 个答案:

答案 0 :(得分:29)

嗯,说"使用MAT"并没有真正回答这个问题!

要在VisualVM中执行此操作,在Sampler或Profiler视图中,有一个标记为"堆转储"的按钮(右上角)。单击此按钮,打开堆分析器。在" Classes"选项卡,显示所有已加载的类。在底部有一个搜索框,键入您感兴趣的类名,在过滤后的视图中双击相关的类。

这将打开实例视图。右键单击左窗格中的实例,然后选择"显示最近的GC根"找到引用该对象的内容。

巴尼

答案 1 :(得分:6)

我使用MAT这样的东西。效果很好,即使在大堆上也是如此。