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: