Jvm的垃圾回收分代回收?CMS 与 G1的区别?

在这里插入图片描述

一、复制算法和标记清理算法

复制算法:两个区域A和B,初始对象在A,继续存活的对象被转移到B。此为新生代最常用的算法
标记清理:一块区域,标记可达对象(可达性分析),然后回收不可达对象,会出现碎片,那么引出
标记-整理算法:多了碎片整理,整理出更大的内存放更大的对象

两个概念:新生代和年老代
新生代:初始对象,生命周期短的
永久代:长时间存在的对象

整个java的垃圾回收是新生代和年老代的协作,这种叫做分代回收

Serial New收集器是针对新生代的收集器,采用的是复制算法
Parallel New(并行)收集器,新生代采用复制算法,老年代采用标记整理
Parallel Scavenge(并行)收集器,针对新生代,采用复制收集算法
Serial Old(串行)收集器,新生代采用复制,老年代采用标记整理
Parallel Old(并行)收集器,针对老年代,标记整理

CMS收集器,基于标记清理
G1收集器:整体上是基于标记 整理 ,局部采用复制

综上:新生代基本采用复制算法,老年代采用标记整理算法。cms采用标记清理

二、引用计数 标记清除 标记压缩 标记整理

CMS过程:
1.初始标记(CMS initial mark):独占CPU,stop-the-world, 仅标记GCroots能直接关联的对象,速度比较快;
2.并发标记(CMS concurrent mark):可以和用户线程并发执行,通过GCRoots Tracing 标记所有可达对象;
3.重新标记(CMS remark):独占CPU,stop-the-world, 对并发标记阶段用户线程运行产生的垃圾对象进行标记修正,以及更新逃逸对象;
4.并发清理(CMS concurrent sweep):可以和用户线程并发执行,清理在重复标记中被标记为可回收的对象。

使用场景:它关注的是垃圾回收最短的停顿时间(低停顿),在老年代并不频繁GC的场景下,是比较适用的

G1过程:
1.初始标记(stw)
2.并行标记(产生漏标) - 三色标记 + SATB
3.重新标记(stw)
4.并行筛选(移动并压缩)

优势:并行与并发:G1充分发挥多核性能,使用多CPU来缩短Stop-The-world的时间

猜你喜欢

转载自blog.csdn.net/wyn_365/article/details/120276475