You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

执行jmap -dump命令会触发Full GC吗?触发后应用会暂停吗?

Jmap堆转储与Full GC的常见问题解答

命令格式纠正

首先提个小细节:你写的命令格式有误,正确的堆转储命令应该是:

jmap -dump:format=b,file=heapdump.hprof <pid>

将<pid>替换为目标Java进程的实际ID即可。

是否会触发Full GC?

这个要分JDK版本来看:

  • JDK 8及更早版本:默认执行jmap -dump时会触发Full GC。Jmap会先通过Full GC清理堆中的垃圾对象,只转储存活对象,以此减小堆转储文件的体积。但如果加上-F参数(用于进程无响应时的强制转储),则不会触发Full GC,直接转储当前堆的全部内容(包括垃圾对象)。
  • JDK 9及之后版本:jmap的实现做了调整,默认不再触发Full GC,直接生成包含所有对象的堆转储。

触发Full GC时应用会停止吗?

会的。只要JVM执行Full GC,就会进入**Stop-The-World(STW)**状态——所有应用线程都会暂停执行,直到Full GC完成。这段时间内应用无法处理任何请求,停顿时长取决于堆的大小、对象数量以及GC的效率。

额外实用建议

如果不想触发Full GC来生成堆转储,在JDK8及之前可以用jcmd命令替代,它默认不会触发Full GC:

jcmd <pid> GC.heap_dump filename=heapdump.hprof

内容的提问来源于stack exchange,提问作者Changjoon Lee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 02:34:51