我正在尝试调试应用程序中的permgen错误。我正在运行VisualVM来分析应用程序,并采取了内存快照的堆转换。
将快照加载到VisualVM中进行分析,我现在可以在类列表中看到几个出现多次的类,全部列出0个实例,0个大小 - 我只期望每个类中的一个(可能链接到它的类加载器) - 有没有办法确定什么仍然保持对没有实例的这些类的引用?很高兴使用其他工具,如果我可以加载转储(.hprof)来分析持有引用的内容。
谢谢!
答案 0 :(得分:29)
嗯,说"使用MAT"并没有真正回答这个问题!
要在VisualVM中执行此操作,在Sampler或Profiler视图中,有一个标记为"堆转储"的按钮(右上角)。单击此按钮,打开堆分析器。在" Classes"选项卡,显示所有已加载的类。在底部有一个搜索框,键入您感兴趣的类名,在过滤后的视图中双击相关的类。
这将打开实例视图。右键单击左窗格中的实例,然后选择"显示最近的GC根"找到引用该对象的内容。
巴尼
答案 1 :(得分:6)
我使用MAT这样的东西。效果很好,即使在大堆上也是如此。