如何比较Netbeans中的内存堆转储?
我所做的是将我的项目配置为使用性能分析,然后在所选代码行添加几个性能分析点(类似于设置断点)。这些分析点会触发“快照”,从而创建内存转储。
当我的应用程序运行时,分析选项卡会列出每个分析点,并标记它遇到的命中的数量,提供打开该分析点报告的链接。此外,探查器控制面板会将新快照添加到列表中。
如果我打开这些报告并按照链接或从控制面板打开快照,在这两种情况下,Netbeans都会打开一个带有Summary
的{strong>快照标签,Classes
,Instances
和OQL
子屏幕。
如果我从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。
答案 0 :(得分:4)
不幸的是,我并没有要求就可以做到这一点的其他工具提出建议。
我发现Netbeans确实支持比较内存堆转储,但只是间接支持。编辑性能分析点,以便在“堆”上选择“快照”。这意味着Netbeans将生成.nps
文件而不是.hprof
文件。
.nps
文件是Netbean自己的专有文件格式,而.hprof
是“通用”堆转储格式,几乎所有的分析工具都可以理解,包括JHAT,MAT& Netbeans的。
然而,Netbeans的限制是它可以查看.hprof
个文件并对其进行分析,但无法将它们与另一个.hprof
文件进行比较。但是,它可以将一个.nps
文件与另一个.nps
文件进行比较。但是,可用的分析级别受.nps
文件的限制,因此需要权衡利弊。
所以,回答我自己的问题:
Netbeans放置NPS文件的位置(如果确实正在创建它们)?如果不是,我如何让Netbeans创建从性能分析点触发的NPS文件?
有没有办法让Netbeans比较HPROF文件,因为那毕竟是内存堆转储?
答案 1 :(得分:2)
我建议使用eclipse的内存分析器:http://www.eclipse.org/mat/
我知道你是netbeans用户,但mat实际上是一个独立的应用程序(基于rcp),能够加载和比较hprof文件。
我发现它是最好的堆分析器,特别是对于更大的堆转储。