Answers:
如果您想要一个相当先进的工具来认真研究一下,请查看Eclipse 的Memory Analyzer项目,该项目由SAP贡献。
您可以做的一些事情非常适合发现内存泄漏等-包括对内存对象运行受限SQL(OQL)形式,即
从com.yourcompany.somepackage.User中选择toString(firstName)
完全辉煌。
您可以使用JHAT,它是JDK默认提供的Java堆分析工具。它是命令行,但是会启动用于检查内存的Web服务器/浏览器。不是最用户友好的,但至少它已经安装了您将要去的大多数地方。一个非常有用的视图是最底部的“堆直方图”链接。
例如: jhat -port 7401 -J-Xmx4G dump.hprof
jhat
也可以在“这些天”执行OQL(底部链接“执行OQL”)
您也可以从Netbeans Profiler或Visual VM独立工具中使用HeapWalker。Visual VM是JHAT的很好的替代品,因为它是独立的,但比JHAT更易于使用。
您需要Java 6+才能完全使用Visual VM。
jvisualvm.exe
在JAVASDK/bin
文件夹
只需获取Eclipse Memory Analyzer。没有什么比这更好的了,它是免费的。
JHAT仅可用于“玩具应用程序”
如果您想对堆转储进行自定义分析,则有:
这个库很快,但是您将需要用Java编写分析代码。
从文档:
我个人更喜欢VisualVM。我在VisualVM中喜欢的功能之一是堆转储比较。在进行堆转储分析时,有多种方法可以找出导致崩溃的原因。我发现有用的方法之一是比较正常堆转储与不正常堆转储。
以下是您可以遵循的步骤: