JAVA GC机制概要

GC逻辑模型

1. 分代模型

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

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

分代模型图解:
JAVA GC机制概要_第1张图片
年轻代进行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:
JAVA GC机制概要_第2张图片
G1:
JAVA GC机制概要_第3张图片
ZGC:
JAVA GC机制概要_第4张图片

垃圾回收器的算法

几种垃圾回收器的介绍

三色标记

你可能感兴趣的:(jvmgc)