JVM 源码分析02 G1垃圾回收

G1垃圾收集算法主要应用在多CPU大内存的服务中,在满足高吞吐量的同时,竟可能的满足垃圾回收时的暂停时间,该设计主要针对如下应用场景:

  • 垃圾收集线程和应用线程并发执行,和CMS一样
  • 空闲内存压缩时避免冗长的暂停时间
  • 应用需要更多可预测的GC暂停时间
  • 不希望牺牲太多的吞吐性能
  • 不需要很大的Java堆

JVM 源码分析02 G1垃圾回收

JVM 源码分析02 G1垃圾回收

JVM 源码分析02 G1垃圾回收

GC模式

G1中提供了三种模式垃圾回收模式,young gc、mixed gc 和 full gc,在不同的条件下被触发。

JVM 源码分析02 G1垃圾回收

JVM 源码分析02 G1垃圾回收

JVM 源码分析02 G1垃圾回收

JVM 源码分析02 G1垃圾回收

full gc

如果对象内存分配速度过快,mixed gc来不及回收,导致老年代被填满,就会触发一次full gc,G1的full gc算法就是单线程执行的serial old gc,会导致异常长时间的暂停时间,需要进行不断的调优,尽可能的避免full gc.