- 不同收集器日志格式不同
- 不同收集器日志有一些共性
- gc日志需要相对应开关控制
GC参数汇总
GC日志参数
-verbose:gc
输出gc详细情况,效果等同于:-XX:+PrintGC
-verbose:gc
稳定版本
参见:[官方文档](http://docs.oracle.com/javase/7/docs/technotes/tools/windows/java.html)
-XX:+PrintGC
非稳定版本,可能在未通知的情况下删除,在下面官方文档中是-XX:-PrintGC。
因为被标记为manageable,所以可以通过如下三种方式修改:
1. com.sun.management.HotSpotDiagnosticMXBean API
2. JConsole
3. jinfo -flag
参见:[官方文档](http://www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.html)
输出格式:
1 | [GC类型(gc原因)gc前占用空间->gc后占用空间(堆总空间),gc消耗时间(秒)] |
-XX:+PrintGCDetails
打印gc详细信息、添加后 -verbose:gc(-XX:+PrintGC)自动失效。
1 | [ |
-XX:+PrintGCTimeStamps
最前面增加gc发生时间(jvm启动到gc发生时刻的秒数),其余格式无变化。
同上面两个参数配合使用。
1 | 0.484: [GC (System.gc()) 4960K->3982K(62976K), 0.0014751 secs] |
GC触发原因
- “System.gc()”;
- “FullGCAlot”;
- “ScavengeAlot”;
- “Allocation Profiler”;
- “JvmtiEnv ForceGarbageCollection”;
- “GCLocker Initiated GC”;
- “Heap Inspection Initiated GC”;
- “Heap Dump Initiated GC”;
- “WhiteBox Initiated Young GC”;
- “WhiteBox Initiated Concurrent Mark”;
- “WhiteBox Initiated Full GC”;
- “Update Allocation Context Stats”;
- “No GC”;
- “Allocation Failure”;
- “Tenured Generation Full”;
- “Metadata GC Threshold”;
- “Metadata GC Clear Soft References”;
- “CMS Generation Full”;
- “CMS Initial Mark”;
- “CMS Final Remark”;
- “CMS Concurrent Mark”;
- “Old Generation Expanded On Last Scavenge”;
- “Old Generation Too Full To Scavenge”;
- “Ergonomics”;
- “G1 Evacuation Pause”;
- “G1 Humongous Allocation”;
- “Diagnostic Command”;
- “unknown GCCause”;
常见GC触发原因
System.gc()
系统主动调用
示例代码
1 | /** |
GC日志
1 | 0.323: [GC (System.gc()) 8665K->1288K(125952K), 0.0040810 secs] |
GC发生原因:System.gc()
Allocation Failure
- Java heap space
- PermGen space
- MetaData Space
Java Heap Space
1 | /** |
日志
1 | 0.364: [GC (Allocation Failure) 10853K->1384K(90112K), 0.0050521 secs] |