Java:比较Netbeans中的内存堆转储

时间:2009-11-25 12:38:59

标签: java netbeans memory-leaks garbage-collection profiling

如何比较Netbeans中的内存堆转储?

我所做的是将我的项目配置为使用性能分析,然后在所选代码行添加几个性能分析点(类似于设置断点)。这些分析点会触发“快照”,从而创建内存转储。

当我的应用程序运行时,分析选项卡会列出每个分析点,并标记它遇到的命中的数量,提供打开该分析点报告的链接。此外,探查器控制面板会将新快照添加到列表中。

如果我打开这些报告并按照链接或从控制面板打开快照,在这两种情况下,Netbeans都会打开一个带有Summary的{​​strong>快照标签,ClassesInstancesOQL子屏幕。

如果我从Profiler控制面板中选择其中一个,然后按保存,则文件将以HPROF格式保存。

如果我选择菜单Profile --> Compare Memory Snapshots,则只允许我选择NPS格式文件,我无法获取这些文件。

我相信比较内存快照听起来应该能够比较堆转储,但我无法弄清楚如何做到这一点。

问题

  • Netbeans在哪里放置NPS文件(如果确实正在创建它们)?如果不是,我如何让Netbeans创建从性能分析点触发的NPS文件?

  • 有没有办法让Netbeans比较HPROF文件,因为那毕竟是内存堆转储?

  • 或者我完全忽视了一些事情?

谢谢!


背景

使用Netbeans 6.7.1

我正在为一个非常大的&具有内存泄漏问题的复杂应用程序。我已经设法使用Netbeans的探测器和放大器的组合来解决大块泄漏问题。 JHAT(JDK附带的命令行工具)。这是剩余的散乱者,我需要更强大的堆分析功能 - 先前起作用的假设优先方法正变得越来越有效。

这个问题非常具体,有关更多背景信息,请参阅a question I have asked previously

2 个答案:

答案 0 :(得分:4)

不幸的是,我并没有要求就可以做到这一点的其他工具提出建议。

我发现Netbeans确实支持比较内存堆转储,但只是间接支持。编辑性能分析点,以便在“堆”上选择“快照”。这意味着Netbeans将生成.nps文件而不是.hprof文件。

.nps文件是Netbean自己的专有文件格式,而.hprof是“通用”堆转储格式,几乎所有的分析工具都可以理解,包括JHAT,MAT& Netbeans的。

然而,Netbeans的限制是它可以查看.hprof个文件并对其进行分析,但无法将它们与另一个.hprof文件进行比较。但是,它可以将一个.nps文件与另一个.nps文件进行比较。但是,可用的分析级别受.nps文件的限制,因此需要权衡利弊。


所以,回答我自己的问题:

  

Netbeans放置NPS文件的位置(如果确实正在创建它们)?如果不是,我如何让Netbeans创建从性能分析点触发的NPS文件?

  • 它是一个或另一个,每个性能分析点只能选择一个。
  

有没有办法让Netbeans比较HPROF文件,因为那毕竟是内存堆转储?

  • 否。您无法与HPROF进行比较。在两个不同时间点比较记忆的唯一方法似乎是比较两个NPS'。

答案 1 :(得分:2)

我建议使用eclipse的内存分析器:http://www.eclipse.org/mat/

我知道你是netbeans用户,但mat实际上是一个独立的应用程序(基于rcp),能够加载和比较hprof文件。

我发现它是最好的堆分析器,特别是对于更大的堆转储。