【G1】Full GC日志分析 - shenjy24/jackal-gc GitHub Wiki
执行参数
-XX:+UseG1GC -XX:+PrintGCDetails -Xms100m -Xmx100m
日志输出
[Full GC (Allocation Failure)  86M->73M(100M), 0.0068544 secs]
   [Eden: 0.0B(7168.0K)->0.0B(5120.0K) Survivors: 0.0B->0.0B Heap: 86.8M(100.0M)->73.8M(100.0M)], [Metaspace: 3532K->3532K(1056768K)]
 [Times: user=0.00 sys=0.00, real=0.01 secs] 
如果堆内存空间不足以分配新的对象,或者是Metasapce空间使用率达到了设定的阈值,那么就会触发Full GC。
你在使用G1的时候应该尽量避免这种情况发生,因为G1的Full GG是单线程、会Stop The World,代价非常高。从日志中可以看出三类信息:
Full GC的原因,这里是Allocation Failure,还有一个常见的原因是Metadata GC Threshold;Full GC发生的频率,每隔几天发生一次Full GC还可以接受,但是每隔1小时发生一次Full GC则不可接受;Full GC的耗时,这张图里的Full GC耗时10ms,实际运行中如果发生Full GC,耗时会比这个多很多。
基础配置参数中,-XX:+PrintGCApplicationStoppedTime和-XX:+PrintGCApplicationConcurrentTime这两个参数可以提供额外有用的信息,如下图所示:
Total time for which application threads were stopped: 0.0020598 seconds, Stopping threads took: 0.0000188 seconds
Application time: 0.0038916 seconds
- 记录了应用线程在安全点被暂停的总时间(也就是STW的总时间);
 - 记录了让所有应用线程进入安全点所花费的总时间;
 - 记录了在两个安全点之间应用线程运行的时间。