2018-06-15T10:44:26.632-0800:Total time for which application threads were stopped: 0.0010226 seconds, Stopping threads took: 0.0001058 seconds
application threads stopped的时间表示应用暂停时间,Stopping threads took 的时间表示等待所有的应用线程都到达安全点花费的时间。只有应用程序线程到达安全点后,JVM才会做些特殊处理,比如垃圾收集、偏向锁擦除等等。
const char* GCCause::to_string(GCCause::Cause cause) {
switch (cause) {
case _java_lang_system_gc://Java程序中手动调用System.gc()方法触发的GC。
return "System.gc()";
case _full_gc_alot://定期触发的GC(JDK内测专属,JVM开发时使用)。
return "FullGCAlot";
case _scavenge_alot://定期触发的GC(JDK内测专属,JVM开发时使用)。
return "ScavengeAlot";
case _allocation_profiler://使用-Xaprof参数运行程序,在JVM结束时会触发的GC(JFK1.8被弃用了)。
return "Allocation Profiler";
case _jvmti_force_gc://强制调用本地方法库中的native方法:ForceGarbageCollection(jvmtiEnv* env)触发的GC。
return "JvmtiEnv ForceGarbageCollection";
case _gc_locker://如果线程执行在 JNI 临界区时,刚好需要进行 GC,此时GCLocker将会阻止GC的发生,同时阻止其他线程进入JNI临界区,直到最后一个线程退出临界区时触发一次GC。
return "GCLocker Initiated GC";
case _heap_inspection://通过jmap命令进行堆检测时触发的GC。堆检测命令:jmap -histo:live <pid>
return "Heap Inspection Initiated GC";
case _heap_dump://通过jmap命令进行堆转储时触发的GC。堆转储命令:jmap -dump:live,format=b,file=heap.out <pid>
return "Heap Dump Initiated GC";
case _wb_young_gc://测试时主动触发的Young GC(需要增加WhiteBox的Agent才能使用)。
return "WhiteBox Initiated Young GC";
case _wb_conc_mark:
return "WhiteBox Initiated Concurrent Mark";
case _wb_full_gc:
return "WhiteBox Initiated Full GC";
case _no_gc://用于表示CMS的并发标记阶段。
return "No GC";
case _allocation_failure://对象分配时内存不足导致分配失败触发的GC。
return "Allocation Failure";
case _tenured_generation_full://年老代空间内存不足触发的GC。
return "Tenured Generation Full";
case _metadata_GC_threshold://元数据空间内存不足触发的GC。
return "Metadata GC Threshold";
case _metadata_GC_clear_soft_refs:
return "Metadata GC Clear Soft References";
case _cms_generation_full://CMS发生FullGC.
return "CMS Generation Full";
case _cms_initial_mark://CMS初始标记阶段的日志信息。
return "CMS Initial Mark";
case _cms_final_remark://CMS重新标记阶段的日志信息。
return "CMS Final Remark";
case _cms_concurrent_mark://CMS并发标记阶段的日志信息。
return "CMS Concurrent Mark";
case _old_generation_expanded_on_last_scavenge:
return "Old Generation Expanded On Last Scavenge";
case _old_generation_too_full_to_scavenge:
return "Old Generation Too Full To Scavenge";
case _adaptive_size_policy://一般出现在PS+PO组合中,空间分配担保时触发的GC。
return "Ergonomics";
case _g1_inc_collection_pause://G1中没有空闲的region区导致分配失败时触发的GC。
return "G1 Evacuation Pause";
case _g1_humongous_allocation://没有Humongous区分配大对象时触发的GC。
return "G1 Humongous Allocation";
case _dcmd_gc_run:
return "Diagnostic Command";
case _last_gc_cause://正常情况下该信息是看不到的。
return "ILLEGAL VALUE - last gc cause - ILLEGAL VALUE";
default://未知(未定义)的原因触发的GC。
return "unknown GCCause";
}
ShouldNotReachHere();
}