学习修复java内存泄漏最好的地方在哪里?我一直试图在网上找到好的资源,但令我失望的是,我发现有人在讨论玩具示例。我也能够排除小玩具转储的故障,但现实世界的应用程序转储更具挑战性,并且给出的线索很少。
我尝试过Jhat、JMap、VisualVM和MAT等工具。
了解修复Java内存泄漏的最佳位置是什么?书的建议也是受欢迎的。
提前谢谢。
发布于 2012-07-31 02:27:35
你有没有试过搜索internet?有很多examples。一个好的搜索引擎会根据relevance对它们进行排序。
发布于 2012-07-31 17:13:18
有许多类型的内存泄漏,但在实践中,以下策略给出了良好的结果(免责声明:我显示的是来自JProfiler的屏幕截图,因为我的公司开发了它):
1.检查最大的对象
“最大的对象”保留了大量的内存,而这些内存是其他人没有的。在JProfiler中,它们可以在堆遍历器的“最大对象”视图中找到。这种情况经常发生在缓存中。

2.检查具有大量实例的类
有时,引用更加复杂,最大的对象不会给出线索。可以检查具有大量实例的类的传入引用。首先,查看累积的引用有助于将有效的引用链与可疑的引用链分开。

此外,检查实例被分配的位置(而不是它们是如何被引用的)通常可以让我们深入了解发生了什么。

通常,这是一个多步骤的过程,选择引用链、分配点,或者根据对象的内容进行选择。
3.搜索GC根的路径
如果这仍然不能提供线索,您可以选择单个对象并显示其引出垃圾收集器根的引用链。这对你们中的许多人在尝试之前能够缩小可疑对象的对象集范围很有帮助,否则可能会有很多候选对象。

还有一个关于这个主题的screen cast。
https://stackoverflow.com/questions/11727183
复制相似问题