10

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

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

谢谢!

4

2 回答 2

43

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

要在 VisualVM 中执行此操作,在 Sampler 或 Profiler 视图中有一个标记为“Heap Dump”的按钮(右上角)。单击此按钮,将打开堆分析器。在“类”选项卡下,显示了所有加载的类。在底部有一个搜索框,输入您感兴趣的类名,在过滤视图中双击有问题的类。

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

巴尼

于 2015-12-06T17:29:59.157 回答
7

我用MAT 来做这样的事情。效果很好,即使在大堆上也是如此。

于 2013-01-15T15:56:44.607 回答