有没有人使用 Eclipse 内存管理器来检测 java 代码中的内存泄漏?有人可以推荐一个寻找有关使用内存管理器的信息的好地方吗?我在网上看了一些东西,它建议我需要让程序运行直到它崩溃(发生内存不足错误),这将生成一个崩溃报告。然后使用内存管理器打开此报告,检查可能发生内存泄漏的位置。每个人都是这样使用内存管理器的吗?
最佳答案
虽然-XX:+HeapDumpOnOutOfMemoryError可能很有用,我当前使用 Eclipse 内存管理器的工作流程是:
- 正常运行程序
- 等待内存失控。
- 运行 jmap :
jmap -dump:format=b,file=dump.hprof <PID>
- 在 EMM 中打开 hprof 文件。
我通常从直方图和支配 TreeView 开始工作,看看是否有任何异常,然后从那里向下钻取。
VisualVM 可能很有用,但在处理堆转储时似乎比 EMM 效率低得多(EMM 缓存了大量有关加载堆转储的信息)。 Netbeans Profiler 非常适合获取分配位置和时间分析。
关于内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1638011/