乐趣区

关于jvm:JAVA-GC机制概要

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:

垃圾回收器的算法

几种垃圾回收器的介绍

三色标记

退出移动版