【发布时间】:2019-08-20 23:44:03
【问题描述】:
如何在 Java 中找到内存泄漏(例如,使用 JHat)?我试图在 JHat 中加载堆转储以进行基本查看。但是,我不明白我应该如何找到根引用 (ref) 或其他任何名称。基本上,我可以看出有几百兆字节的哈希表条目([java.util.HashMap$Entry 或类似的东西),但地图到处都在使用......有什么方法可以搜索大地图,或者也许找到大对象树的一般根?
[编辑] 好的,到目前为止我已经阅读了答案,但我们只是说我是一个便宜的混蛋(这意味着我对学习如何使用 JHat 比为 JProfiler 付费更感兴趣)。此外,JHat 始终可用,因为它是 JDK 的一部分。当然,除非 JHat 没有办法,只有蛮力,但我不敢相信会是这样。
另外,我认为我无法真正修改(添加所有地图大小的日志记录)并运行足够长的时间让我注意到泄漏。
【问题讨论】:
-
这是对 JProfiler 的另一个“投票”。它非常适合堆分析,具有不错的 UI,并且运行良好。正如 McKenzieG1 所说,500 美元比您寻找这些泄漏源的时间要便宜。就工具的价格而言,还不错。
-
Oracle在这里有一个相关页面:docs.oracle.com/javase/8/docs/technotes/guides/troubleshoot/…
标签: java memory memory-leaks jhat