VisualVM - 查找对类的所有引用

2022-09-04 23:52:42

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

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

谢谢!


答案 1

好吧,说“使用MAT”并不能真正回答这个问题!

若要在 VisualVM 中执行此操作,在“采样器”或“探查器”视图中,有一个标记为“堆转储”的按钮(右上角)。单击此按钮,这将打开堆分析器。在“类”选项卡下,将显示所有已加载的类。在底部有一个搜索框,键入您感兴趣的类名称,在过滤视图中双击有问题的类。

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

巴尼


答案 2

我使用MAT来做这样的事情。即使在大堆上也能很好地工作。


推荐