Java VisualVM-查找对类的所有引用

Java VisualVM-查找对类的所有引用,java,memory-leaks,visualvm,Java,Memory Leaks,Visualvm,我正在尝试调试应用程序中的permgen错误。我正在运行VisualVM来评测该应用程序,并已拍摄了大量内存快照 将快照加载到VisualVM中进行分析,我目前可以在类列表中看到几个类多次出现,所有这些类都列出了0个实例,大小为0-我只希望每个类中有一个(可能链接到其类加载器)-是否有任何方法可以确定哪些仍然保留对这些类的引用,而没有实例?如果我可以在转储(.hprof)中加载来分析保存引用的内容,我很乐意使用另一个工具 谢谢 我用它来做这样的东西。即使是在大堆的情况下,效果也很好。好吧,说“使

我正在尝试调试应用程序中的permgen错误。我正在运行VisualVM来评测该应用程序,并已拍摄了大量内存快照

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

谢谢

我用它来做这样的东西。即使是在大堆的情况下,效果也很好。

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

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

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


巴尼

过去我用过你的工具包。它可以加载转储。您可以获得一个免费的eval许可证。@对于这个问题,barneypitt下面的答案是正确的。感谢您——刚刚偶然发现MAT的另一个建议——已经安装在Eclipse中,因此将加载日志以查看我能找到什么。