GC逻辑模型

1. 分代模型

serial和parallel、parNew以及CMS都是基于分代模型实现的GC组件。
分代模型将内存大抵分为几个局部:
年老代、幸存区、老年代。
其中年老代和幸存区由一个回收器组件进行回收。
老年区由另一个组件进行回收。

serial下的两个组件别离是:SerialGC 和 SerialOldGC
parallel则是ParallelGC和ParallelOldGC
CMS也是基于分代模型,不过因为其没有对应的年老代回收组件,大多数状况下应用parNew进行搭配,parNew和ParallelGC没有实质的区别,次要是为了配合CMS进行了优化。

分代模型图解:

年老代进行GC后没有胜利清理的的对象将会进入幸存区。
Eden与Survivor区默认8:1:1
eden区加上Survivor区和老年代的比例个别是1:2

(这些比例都是能够调整的)
如果新生代放不下新建的对象,则会发动Minor GC,Minor GC后仍旧放不下则会将对象提前放入老年代(如果老年代也放不下则会调用full GC,full GC后仍旧放不下则会OOM)

2. 无分代模型

G1和ZGC目前的实现都大幅度的弱化了分代模型的概念,ZGC更是齐全没有分代的概念,整套垃圾回收机制由一套简单的算法进行实现
其中G1是从CMS演变而来,流程上略有些类似
大抵流程如下图
CMS:

G1:

ZGC:

垃圾回收器的算法

几种垃圾回收器的介绍

三色标记