Java:查找使用所有内存的原因

3

我有一个Java应用程序,内存不足,但我不知道哪些代码分配了内存。是否有一种应用程序可以检查这个问题?我使用Eclipse。

10个回答

9

如果你使用Eclipse,我建议使用Eclipse Memory Analyzer插件。这个工具非常好用,甚至会提供一个报告来指出可能的泄漏嫌疑。我用它查看过超过1G的堆转储文件而没有问题。我只是使用JDK自带的jconsole来获取转储文件。

还有一个非常好的博客介绍如何使用这个工具,这个博客的作者之一也是这个工具的开发者。

这个工具也是免费的。


+1:不错的工具...您知道是否有任何关于JVM版本或JVM类型的限制吗? - LB40
我不确定JVM的限制,我已经在1.5和1.6中使用过它。但是,我在旧版本的Java中很难获取堆转储,而该工具依赖于此。 - broschb

5

VisualVM是一种可视化工具,将多个命令行JDK工具和轻量级分析功能集成在一起。它旨在用于生产和开发期间的使用,并进一步增强了监控和性能分析Java SE平台的能力。

而且,它已经被包含在JDK中了。


4

3

2

有很多免费的工具,但JProfiler非常好。 - ggb667

2

我相信每个人都有自己喜欢的,但我推荐Netbeans


1

Yourkit是一款非常棒的工具,我已经在很多场合使用它来寻找和记录性能问题。Eclipse与TPTP框架也可以用来做这件事情。它还可以对远程应用服务器进行优化(需要启用性能分析代理并在JVM中开启远程调试),而且可以在几乎任何J2EE环境下运行性能分析。


1

如果您需要快速分析代码或者不使用Eclipse或较旧版本的jvm,则hprof是一个不错的选择。(我只是将其作为参考提供。)


hprof的一个重要优势是它具有最小的依赖关系:它是JDK的一部分,没有GUI。因此,在紧急情况下,即使生产服务器没有GUI,您也可以轻松地直接安装和运行它。试试在Eclipse中实现这一点;-)。 - sleske

0

前几天我不得不找到一个导致2.6G堆转储的内存泄漏源。Jhat需要惊人的20G堆大小才能在不崩溃的情况下处理它。Eclipse内存分析器只用了不到10G就完成了。话虽如此,我发现这两个工具都很有用,但建议首先使用内存分析器以更有效地使用内存和更易于使用。

我对所使用的内存量感到非常惊讶,但我可以向您保证,如果我使用更少的内存,我会遇到OutOfMemory错误。


0
我使用HP诊断分析器免费评估版(5个线程无限制)发现了内存泄漏。它可以以可视化、简单的方式跟踪内存分配并进行堆分析。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接