Java内存分析工具和内存泄漏检测工具有什么区别?

时间:2010-01-21 11:40:37

标签: java memory-leaks

Java内存分析工具(像Yourkit Java Profiler这样的分析器)和Java内存泄漏检测工具之间有什么区别吗? (从我的搜索来看,差异在很多工具中很难注意到,但对我而言,这听起来像是方法方式的不同)。 如果有,是否有任何免费(可供下载)工具用于内存泄漏检测(不是内存分析)?提前谢谢!

2 个答案:

答案 0 :(得分:3)

严格地说,在C / C ++意义上,java中没有内存泄漏:内存分配,不再引用它。

因此,当在java上下文中使用术语“泄漏”时,有时它只意味着一个大的内存结构。有些工具称它们为“泄漏嫌疑人”,因为由于问题的性质或错误,他们无法判断内存结构是否很大。

有时在动态意义上使用“泄漏”:随着时间的推移而增长的记忆结构。

首先,您需要一个内存工具,它可以为您提供Java堆转储快照中内存分配和引用结构的定量概述。有了这个,您可以通过比较两个或更多快照来调查动态行为。

如果这些工具提供附加的“泄漏功能”(JProbe的Memory-Leak-Doctor,Eclipse-MATs内存泄漏报告),则表明他们首先在内存结构上提供了一个非常全面的视图。< / p>

如果您正在寻找免费下载,请查看

http://eclipse.org/mat/

http://dr-brenschede.de/bheapsampler/

答案 1 :(得分:1)

将内存泄漏检测工具视为内存分析工具的优化版本,可帮助您找到问题,而无需亲自搜索数据。

我使用过Yourkit。我认为它有两个特点。虽然它没有明确指出“哟伙计,你的漏洞就在这行代码上”,它提供了用于比较内存快照的实用程序,以显示随时间变化的内容,并提供各种实用程序来追踪对象的引用以找出它们的原因仍被关在记忆中。

根据您对泄漏检测工具的定义,可以说JConsole中显示堆内存使用情况的图表是一个泄漏检测工具。查看在足够长的使用期内堆消耗的图表...如果平均值持续上升,则很有可能发生泄漏。

我与Yourkit人员无关,但我可以推荐该工具。它可能会更好,但也不错。我用它来进行内存和CPU性能分析。我在我们的产品上定期进行加载和内存测试(JConsole / JMX和其他方法),并在出现奇怪的事情时使用Yourkit。大约每2-4个月我会进行一次cpu分析,寻找易于修复的性能瓶颈(我们的负载测试可以解决主要问题)。