如何在NetBeans中更好地调查内存泄漏

时间:2010-11-27 22:46:51

标签: java memory netbeans memory-leaks profiling

我正在写一个网络蜘蛛。它运行良好,除了似乎有内存泄漏。该程序将运行正常约15分钟,然后它将崩溃。

如果我使用NetBeans中的“配置文件”功能监视它,我可以看到内存随着时间的推移而增加,直到最终我得到java.lang.OutOfMemoryError并且程序完全崩溃。

下面的图片显示了一分钟后和15分钟后(在它崩溃之前)使用的对象内存的快照。有没有办法告诉这些对象的位置(我的主要罪魁祸首是byte[]和{{ 1}})正在创建或仍在引用它们的内容(因此防止它们被垃圾收集器破坏)?

或者我不知道我在说什么?

alt text

谢谢,感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

您的假设可能正确,但可能没有使用正确的工具?

我不了解NetBeans,但我知道Yourkit Profiler和JProfiler都是这类分析的强大工具。你可以走堆并分析“热点”。这两个工具都有试用许可证,因此您可以试用它们以查看哪一个最适合您。

答案 1 :(得分:1)

使用分析器分析内存时,可以打开堆栈跟踪记录以进行对象分配。

在该模式下运行时,可以右键单击该类并显示创建对象的堆栈跟踪。这应该给你足够的信息来追踪内存泄漏。

您可能也想阅读这篇文章: http://netbeans.org/community/magazine/html/04/profiler.html