如何在Java VisualVM中查看内存分配堆栈跟踪

17
本文介绍如何在Java VisualVM中查看内存分配堆栈跟踪:http://rejeev.blogspot.de/2009/04/analyzing-memory-leak-in-java.html 简而言之,在Java VisualVM选项中定义一个自定义预设,并在内存设置选项卡中选中“记录分配堆栈跟踪”复选框
现在,当我选择该自定义预设并开始内存分析时,我仍然无法查看内存分配堆栈跟踪。没有右键单击项目操作“拍摄快照并显示分配堆栈跟踪”,就像文章中描述的那样,也没有任何类似的东西。我正在使用VisualVM 1.7。
我该如何查看这些分配堆栈跟踪?

你在哪里寻找右键操作“Take snapshot and show allocation stack traces”?你是否在实时结果表中选择了特定的类? - Tomas Hurka
请检查您的JDK和JVM是否兼容(例如,它们都是32位或都是64位)。 - Daniel
2个回答

22

如果您无法看到此选项,请前往 Profiler -> 激活 "设置" 复选框,同时在分析器未激活时激活 "记录分配堆栈跟踪"。


4
在分析器运行时,您需要单击快照按钮,然后才能右键单击并查看分配堆栈跟踪。 - qwertzguy

2

采样器选项卡中启用内存分析,然后按下堆转储按钮。


11
这是一些不同的东西 - 垃圾堆转储不会向你展示分配的堆栈跟踪。此外 - 要获取垃圾堆转储,你不需要在“Sampler”选项卡中使用“内存”分析。你可以从“Monitor”选项卡或被监控应用程序的上下文菜单中获取垃圾堆转储。 - Tomas Hurka
虽然这是对不同问题的答案,但它是一种有用的方法。Eclipse Memory Analyzer 对于分析堆转储非常有帮助,但带有分配跟踪的 VisualVM 快照也是非常有帮助的。 - adamfisk
抱歉给你点了个踩,那是我不小心点到的(可能是在试图进入另一个页面时误触了它)!SOF有一个条件反射的规则,5分钟后你的投票就会被锁定。对此感到抱歉! - WestCoastProjects
除此之外,您还可以查看线程分配情况,然后单击“Delta”以查看哪个线程分配了更多字节(对于多线程更有用)。 - experiment unit 1998X

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接