执行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
相关产品推荐
相关产品推荐

