共计 596 个字符,预计需要花费 2 分钟才能阅读完成。
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:
垃圾回收器的算法
几种垃圾回收器的介绍
三色标记
正文完