我有一个内存耗尽的java应用程序,但我不知道哪个代码正在分配内存。有没有我可以查看的应用程序?我用Eclipse。
答案 0 :(得分:9)
因为你使用eclipse我会推荐Eclipse Memory Analyzer插件。这个工具效果很好,甚至可以提供一些可能泄漏嫌疑人的报告。我已经看过1G堆堆转储没有问题。我只是使用JDK附带的jconsole来获取转储。
此工具的作者之一使用该工具也是一个很棒的blog。
这也是免费的。
答案 1 :(得分:5)
VisualVM是一个集成了多个命令行JDK工具和轻量级分析功能的可视化工具。它专为生产和开发时使用而设计,进一步增强了Java SE平台的监控和性能分析功能。
它包含在JDK中。
答案 2 :(得分:4)
我在JProfiler
上取得了很大的成功http://www.ej-technologies.com/products/jprofiler/overview.html
答案 3 :(得分:3)
你想要一个Profiler。
答案 4 :(得分:2)
您需要使用内存分析器。您可以使用Sun的JVM Tool Interface或第三方分析器,例如JProfiler。 Eclipse还具有分析工具,称为Test & Performance Tools Platform(TPTP)。
答案 5 :(得分:2)
我确信每个人都有他们的最爱,但我建议Netbeans。
答案 6 :(得分:1)
Yourkit是一个很棒的工具,我在很多场合都用它来查找和记录性能问题。具有TPTP框架的Eclipse也可用于执行此操作。它也适用于远程应用程序服务器(您需要启用分析代理并在JVM中启用远程调试),但它允许您针对几乎任何J2EE环境运行分析。
答案 7 :(得分:1)
对于快速分析或如果您不使用Eclipse或旧版本的jvm,hprof是一个不错的选择。 (我只是将其作为参考添加。)。
答案 8 :(得分:0)
我必须找到内存泄漏的来源,这一天产生了2.6G堆转储。 Jhat需要一个令人难以置信的20G堆大小来克服它而不会崩溃。 Eclipse内存分析器在10G以下完成。也就是说,我发现这两种工具都很有用,但是首先会建议使用内存分析器来更有效地使用内存并且更容易使用。
我对使用的内存量感到非常惊讶,但我可以向你保证,如果我使用较少的内存,则会出现OutOfMemory错误。
答案 9 :(得分:0)
我发现了使用HP Diagnostics Profiler免费评估的内存泄漏(5个线程无限制)。它允许跟踪内存分配并以直观,简单的方式进行堆分析。