Eclipse RCP应用程序中的内存泄漏

问题描述 投票:3回答:5

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

eclipse memory-leaks rcp
5个回答
6
投票

您可能需要尝试JRockit Mission ControlEclipse MAT一起提供的Memory Leak Detector。这是一个强大的组合。这两种工具都可以免费用于开发。

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

alt text (来源:oracle.com

使用MAT,您可以使用最短路径来查找根目录,以找到保留泄漏对象的链。见下文

alt text http://dev.eclipse.org/blogs/memoryanalyzer/files/2008/04/path2gc_all.png

修改代码并使用内存泄漏检测程序验证关闭编辑器/视图时对象是否为垃圾回收。


3
投票

你需要某种分析工具。

eclipse有一个Memory Analyzer项目(wikiblog)。

此外,它看起来像TPTP也做剖析。


1
投票

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

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

还包括内存分析器,堆walker和Eclipse integration

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

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


0
投票

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

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

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


0
投票

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

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

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

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

编辑:我忘了添加,这个工具集成到了eclipse中。

© www.soinside.com 2019 - 2024. All rights reserved.