JVM垃圾收集器总结
一.经典的垃圾收集器:
Serial收集器:
(1)最基础最悠久的收集器
(2)工作在新生代:复制算法
(3)Stop the World
ParNew收集器
(1)多线程版的Serial
(2)可以与CMS配合使用
(2)工作在新生代
Parallel Scavenge收集器
(1)和前两款收集器相比,更注重吞吐量。(前两款注重垃圾收集时间)
(2)-XX:MaxGCPauseMillis 收集器将尽量使得每次的收集时间小于此参数,参数值越小,垃圾收集越频繁
(3)-XX:GCTimeRatio
(4)自动调整参数的策略叫做自适应的调节策略
(5)工作在新生代
(6)多线程
Serial Old
(1)老年代的Serial
(2)工作在老年代:标记整理算法
Parallel Old
(1)Parallel Scavenge的老年代版本
CMS收集器
(1)以最短回收停顿时间为目标的收集器
(2)工作在老年代,标记清除算法
(3)并发低停顿收集器
(4)多核机器表现良好,核心不足则表现较差
(5)i-CMS用在核心不足的机器上以提升性能,但是效果不佳
(6)可能因为无法处理浮动垃圾而启动Serial Old进行老年代的垃圾收集
(7)工作步骤:
初始标记(STW)
并发标记
重新标记(STW) :增量更新
并发清理
Garbage First(G1)
(1)工作在新生代和老年代,但内存分区不在固定,G1将内存划分为多个CSet,专注于垃圾多的地方
(2)JDK9 开始为默认垃圾收集器
(3)基于Region的堆内存布局,每一个Region的分代不固定
(4)超过一个Region一半的对象为大对象,发在Humongous Region中
(5)由于存在跨Region的引用,每个region都要维护一个双向卡表,G1需要耗费Java堆容量的10%~20%,比一般垃圾收集器占用内存更多
(6)TAMS :每个Region两个,用于新对象的创建
(7)工作步骤:
初始标记
并发标记:仅此不需要暂停用户线程
最终标记:原始快照
筛选回收
二.低延迟的垃圾收集器
Shenandoah
非官方收集器
(1)连接矩阵:代替了记忆集 (这东西就是图论中的连接矩阵)
(2)工作阶段
初始标记 : 用于标记GC ROOT (STW)
并发标记 : 标记出全部可达对象
最终标记 :
并发清理 : 清理完全没有存活对象的region
并发回收 : 将存活对象移动到未使用的region
初始引用更新:复制完之后更新引用,但这一步仅仅做了一个确认:所有复制任务都已经完成
并发引用更新:真正开始的引用更新操作
最终引用更新:更新GC root中的引用,STW
并发清理 : 赋值完之后,清理赋值前的原对象
(2) brooks point
位于对象最前面的一个引用字段,不发生并发移动时指向自己.
用于引用更新,之前对象移动时,通过保护陷阱解决问题
ZGC
ZGC收集器是一款基于Region内存布局的,不设分代的,使用了读屏障,染色指针和内存多重映射等技术实现可并发的标记整理算法的,以低延迟为首要目的的一款垃圾收集器.
(1)region
小型region:2MB,对象<=256KB
中型region:32MB,对象<=4MB
大型region:一个region一个对象,总容量必须是2MB的倍数
(2)指针染色技术:
使用地址指针的前四位进行标记.
使用多重映射解决机器硬件不支持问题
(3)最大内存管理: 4TB
(4)工作阶段:
并发标记:
并发预备重分配:记录存活对象会被重新赋值到哪个region
并行重分配: 自愈 转发表
并发重映射: 更正所有的旧引用,实际放在并发标记完成
(5)支持 非统一内存访问架构(NUMA-Aware)
Epsilon
无操作
适用于小应用
总结
一个垃圾收集器收集垃圾,其实就是两个部分:
标记,清理
对于Serial,ParNew,Parallel Scavenge,Serial Old,Parallel Old这些收集器来说,工作阶段就是这两个
他们几个的区别,主要体现在工作区域和是否多线程
CMS的工作阶段有四个,初始标记,并发标记,重新标记,并发清除.你仔细一看,那还是标记和清理
G1的工作阶段与CMS相似,初始标记,并发标记,最终标记,筛选回收.与CMS的不同之处主要体现在内存布局,垃圾标记的算法之上
Shenandoah的工作阶段更多,初始标记,并发标记,最终标记,并发清理,并发回收,初始引用更新,并发引用更新,最终引用更新,并发清理. 这引用更新是为了解决移动对象时的STW问题
注意:
1.上图中的标记并发不包括枚举GC root,如果枚举GC root,一定要STW
2.使用标记复制,标记整理算法会引发STW,但是Shenandoah通过Brooks Pointer,ZGC通过染色指针和转发表解决了此过程STW问题
如需转载,请注明出处
如有侵权,联系删除
2290713181@qq.com
如有侵权,联系删除
2290713181@qq.com