3

如何检测 Eclipse RCP 应用程序中的内存泄漏?

4

5 回答 5

6

您可能想尝试使用JRockit Mission ControlEclipse MAT附带的 Memory Leak Detector 。这是一个强大的组合。这两种工具都可以免费用于开发。

使用 JRockit Mission Control,您可以在线检查堆并查看特定类型的活动对象的确切数量,而无需拍摄耗时的快照。关闭视图/编辑器后,您可以直接查看是否有一个编辑器、视图或侦听器对象留在堆上。它通常是一个框架侦听器,可以保留您的视图/编辑器。请记住,您必须转到 Windows->Preferences->Memory Leak Detector->Trend 并将Lowest Heap Usage设置为 0.0 以查看所有对象实例。

替代文字
(来源:oracle.com

使用 MAT,您可以使用到线程根的最短路径来查找持有泄漏对象的链。见下文

替代文本 http://dev.eclipse.org/blogs/memoryanalyzer/files/2008/04/path2gc_all.png

修改您的代码并使用内存泄漏检测器验证在您关闭编辑器/视图时该对象已被垃圾回收。

于 2009-05-06T21:18:15.613 回答
3

您需要某种分析工具。

eclipse ( wiki , blog )上有一个Memory Analyzer项目。

此外,看起来TPTP也可以进行分析。

于 2009-05-06T13:46:28.773 回答
1

Java JDK 附带最简单的解决方案:Java VisualVM。

自 JDK 6 更新 7 起,它就位于 bin 目录(Windows 下的 jvisualvm.exe)中。

还包括一个内存分析器、一个堆遍历器和一个Eclipse 集成

https://visualvm.dev.java.net/images/getstarted/vvm-anagram-profiler.png(太糟糕了,我不允许使用图像标签)

https://visualvm.dev.java.net/

于 2009-05-06T21:36:48.707 回答
0

如果您在 Windows 上,最简单的方法就是在使用该工具时在任务管理器中监视例如 eclipse.exe 进程。如果您的 RCP 可执行文件具有不同的名称,那么这就是您需要监控的内容。在 Unix 上,您可以使用类似的工具(可能是 proc?)。

执行可用的最密集的任务(或者如果您怀疑某些功能会导致问题,请使用这些功能)。如果 eclipse.exe 使用的内存量在您完成密集任务后最终没有减少,那么您可能有泄漏。这最终会导致内存不足错误。

您可以通过 eclipse.ini(或 .ini)中的“-Xmx”设置减少应用程序可用的内存量来加速内存不足错误。例如 -Xmx256m 表示最大 256 MB 可用。显然,此设置仍然需要足以运行您的应用程序,但较低的设置将强制更频繁的垃圾收集并使泄漏更加明显。

于 2009-05-06T13:54:43.027 回答
0

您需要一个内存分析器(正如其他人提到的那样。)一旦您拥有了一个好的工具,您就可以很容易地找到问题。

我们使用: http ://www.yourkit.com/

对于我们的测试,它运行良好,具有浮动许可证,因此开发人员可以在他们的机器上本地使用它。

基本上,您对正在执行的操作进行快照,然后查看已分配但未释放的项目。

编辑:我忘了补充,这个工具直接集成到 eclipse 中。

于 2009-05-06T20:53:44.580 回答