当我跑步时jcmd PID help GC.heap_dump
,帮助中明确指出会调用full GC,除非-all
指定标志:
GC.heap_dump
...
影响:高:取决于 Java 堆大小和内容。除非指定了“-all”选项,否则请求完整 GC。 <...>
-all : [可选] 检查所有对象,包括无法访问的对象(BOOLEAN,false)
如果我跑jcmd PID help GC.class_histogram
,帮助中没有提到任何关于强制执行完整GC的内容,但是“影响”仍然被认为是“高”,并且该选项仍然有一个-all
标志,其行为与GC.heap_dump
:
GC.class_histogram
...
影响:高:取决于 Java 堆大小和内容。
-all : [可选] 检查所有对象,包括无法访问的对象(BOOLEAN,false)
我尝试在几个环境中运行此命令,但未调用完整 GC。然而,自从它“取决于 Java 堆大小和内容”我不能确定。
So can jcmd PID GC.class_histogram
在某些情况下调用完整GC?如果有,它们是什么?
jcmd PID GC.class_histogram
默认情况下会导致Full GC。
如果目标 JVM 启动时使用-XX:+PrintGC
,您将看到类似这样的日志消息
// JDK 8:
[Full GC (Heap Inspection Initiated GC) 1397K->331K(126720K), 0.0023298 secs]
// JDK 9:
[15.503s][info ][gc] GC(0) Pause Full (Heap Inspection Initiated GC) 2M->0M(8M) 8.107ms
然而,随着-all
选项将不会有 Full GCGC.class_histogram
,完全就像GC.heap_dump
。找到证明热点来源 http://hg.openjdk.java.net/jdk8u/jdk8u/hotspot/file/ff3b27e6bcc2/src/share/vm/services/diagnosticCommand.cpp#l385:
void ClassHistogramDCmd::execute(DCmdSource source, TRAPS) {
VM_GC_HeapInspection heapop(output(),
!_all.value() /* request full gc if false */);
VMThread::execute(&heapop);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)