【G1】垃圾收集时机 - shenjy24/jackal-gc GitHub Wiki

Young GC

Young GC并不是说现有的Eden区放满了就会马上触发,G1会计算下现在Eden区回收大概要多久时间,如果回收时间远远小于参数 -XX:MaxGCPauseMills 设定的值,那么增加年轻代的region,继续给新对象存放,不会马上做Young GC,直到下一次Eden区放满,G1计算回收时间接近参数 -XX:MaxGCPauseMills 设定的值,那么就会触发Young GC

Mixed GC

不是Full GC,老年代的堆占有率达到参数(-XX:InitiatingHeapOccupancyPercen)设定的值则触发,回收所有的Young和部分Old(根据期望的GC停顿时间确定old区垃圾收集的优先顺序)以及大对象区,正常情况G1的垃圾收集是先做Mixed GC,主要使用复制算法,需要把各个 Region 中存活的对象拷贝到别的 Region 里去,拷贝过程中如果发现没有足够的空 Region 能够承载拷贝对象 就会触发一次Full GC

Full GC

停止系统程序,然后采用单线程进行标记、清理和压缩整理,好空闲出来一批 Region 来供下一次Mixed GC使用,这个过程是非常耗时的。