首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在没有垃圾收集的情况下,我如何在Java 5上获取堆转储?

在没有垃圾收集的情况下,我如何在Java 5上获取堆转储?
EN

Stack Overflow用户
提问于 2009-08-12 19:51:14
回答 5查看 14K关注 0票数 11

我们有一个长期运行的运行Java 5的服务器应用程序,分析它可以看到老一代随着时间的推移而缓慢增长。它在完整的GC上被正确释放,但我希望能够使用堆转储来查看Eclipse MAT中无法访问的对象。我已经使用+XX:HeapDumpOnCtrlBreak成功地获得了一个堆转储,但是JVM总是在转储堆之前执行GC。显然,在Java6上不会发生这种情况,但我们现在只能使用5。有什么方法可以防止这种情况发生吗?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-08-12 19:53:56

我建议使用像YourKit这样的第三方分析器,它可以让你在不启动GC的情况下拍摄快照。增加了额外的好处,你可以在没有整个ctrl-break恶作剧的情况下拍摄快照。

票数 1
EN

Stack Overflow用户

发布于 2016-02-23 19:04:13

使用jconsole或visualvm或jmc或...其他jmx管理控制台。在com.sun.management中打开HotSpotDiagnostic。选择dumpHeap 方法,传入两个参数:

转储file

  • (true/false)仅转储活动对象的
  • 路径。使用false转储所有对象。

请注意,转储文件将由您连接的JVM写入,而不是由JVisualVM写入,因此如果JVM在不同的系统上运行,它将写入该系统。

票数 13
EN

Stack Overflow用户

发布于 2013-08-23 19:24:18

您有没有尝试过JDK附带的标准jmap工具?jmap收费是在Java5中正式引入的。

命令行示例: /java/bin/jmap -heap:format=b

可以使用标准的jhat工具或诸如MAT之类的GUI应用程序来处理结果。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1268336

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档