如何查找Java内存泄漏如何在Java中发现内存泄漏(例如,使用Jhat)?我试着在Jhat中加载堆转储,以了解基本情况。但是,我不明白如何才能找到根引用(参考文献)或者不管它叫什么。基本上,我可以看出哈希表条目有几百兆字节([java.util.HashMap$Entry或类似的东西]),但是地图在整个地方都使用.有没有什么方法可以搜索大型地图,或者可能找到大型对象树的一般根?[编辑]好吧,到目前为止,我已经读过答案了,但我只能说我是个卑鄙的混蛋(这意味着我更感兴趣的是学习如何使用Jhat而不是支付JProfiler的费用)。而且,Jhat总是可用的,因为它是JDK的一部分。当然,除非Jhat没有办法,只能用蛮力,但我不敢相信情况会是这样。此外,我认为我无法实际修改(添加全并运行足够长的时间让我注意到泄漏。
3 回答

MM们
TA贡献1886条经验 获得超2个赞
启动应用程序,直到它达到“稳定”状态,这时所有初始化都完成了,应用程序处于空闲状态。 多次运行怀疑产生内存泄漏的操作,以允许发生任何与缓存、DB相关的初始化。 运行GC并获取内存快照。 再做一次手术。根据操作的复杂性和所处理数据的大小,操作可能需要运行几次至多次。 运行GC并获取内存快照。 对两个快照运行一个diff并进行分析。
添加回答
举报
0/150
提交
取消