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

Posted

技术标签:

【中文标题】如何更好地调查 NetBeans 中的内存泄漏【英文标题】:How can I investigate a memory leak better in NetBeans 【发布时间】:2010-11-27 22:46:51 【问题描述】:

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

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

下图显示了 1 分钟后和 15 分钟后使用的对象的内存快照(就在它崩溃之前)。有没有办法知道这些对象在哪里(我的主要罪魁祸首是 byte[]char[])正在创建或仍在引用它们(因此防止它们被垃圾收集器销毁)?

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

谢谢,感谢您的帮助。

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

我下载了 Yourkit Profiler,它准确地告诉了我我需要什么。内存泄漏已解决。非常感谢! 哇,真快!很高兴它有帮助。干杯【参考方案2】:

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

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

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

【讨论】:

您尝试过 Netbean profiler 工具吗?我用的是netbean IDE,不知道他们的profiler工具性能好不好。 与其他配置文件一样,它确实为配置文件的应用程序增加了一些开销,但我对此很满意。

以上是关于如何更好地调查 NetBeans 中的内存泄漏的主要内容,如果未能解决你的问题,请参考以下文章

防止相关功能中的内存泄漏[关闭]

JavaScript中的内存泄漏以及如何处理

OpenCV Python:如何避免 py3 中的 cv2.imwrite() 内存“泄漏”?

如何确定我的 android 应用程序是不是存在内存泄漏?

go调查内存泄漏

用 Rust 处理 WebAssembly 中的闭包而不是使用忘记和泄漏内存有啥更好的方法?