JVM 几种垃圾回收器对比
创作时间:
作者:
@小白创作中心
JVM 几种垃圾回收器对比
引用
CSDN
1.
https://blog.csdn.net/chen1030416518/article/details/140374318
JVM中的垃圾回收器是Java虚拟机的重要组成部分,负责自动管理内存,释放不再使用的对象所占用的内存空间。不同的垃圾回收器在回收区域、回收算法、线程模式等方面存在差异,适用于不同的应用场景。本文将详细介绍几种常见的JVM垃圾回收器及其工作原理。
垃圾收集器 | 回收区域 | 回收算法 | 单/多线程 | 备注 |
|---|---|---|---|---|
Serial | 新生代 | 标记-复制 | 单线程 | |
Serial Old | 老年代 | 标记-整理 | 单线程 | Serial 的老年代版本;与 Parallel Scavenge 收集器搭配使用(jdk1.5以前);用作 CMS 收集器的后备方案 |
ParNew | 新生代 | 标记-复制 | 多线程 | Serial 的多线程版本 |
Parallel Scavenge | 新生代 | 标记-复制 | 多线程 | 其目标是达到一个可控制的吞吐量 |
Parallel Old | 老年代 | 标记-整理 | 多线程 | Parallel Scavenge 的老年代版本 |
CMS | 老年代 | 标记-清除 | 混合 | 重要、并发。(ParNew是CMS默认的新生代垃圾回收器) |
G1 | 整堆 | 标记-复制? | 混合 | 并发 |
ZGC | 整堆 | 标记-复制? | 并发 |
CMS工作过程
CMS(Concurrent Mark Sweep)收集器的工作过程分为4个步骤:
- 初始标记
- 暂停所有的其他线程,并记录下直接与 root 相连的对象,速度很快。
- 并发标记
- 同时开启 GC 和用户线程,用一个闭包结构去记录可达对象。但在这个阶段结束,这个闭包结构并不能保证包含当前所有的可达对象。因为用户线程可能会不断的更新引用域,所以 GC 线程无法保证可达性分析的实时性。所以这个算法里会跟踪记录这些发生引用更新的地方。
- 重新标记
- 重新标记阶段就是为了修正并发标记期间因为用户程序继续运行而导致标记产生变动的那一部分对象的标记记录,这个阶段的停顿时间一般会比初始标记阶段的时间稍长,远远比并发标记阶段时间短。
- 并发清除
- 开启用户线程,同时 GC 线程开始对未标记的区域做清扫。
CMS 收集器有 3大缺点:浮动垃圾,并发失败以及内存碎片。
G1工作过程
G1(Garbage-First)收集器的工作过程如下:
- 当不需要清理老年代时,只回收新生代。
- 当整堆占用达到指定阈值(初始值45%),需要回收老年代:
- 先进行一次年轻代回收过程,这个过程是Stop-The-World的。
- 恢复应用程序线程的执行。
- 开始老年代对象的标记过程。此过程是与应用程序线程并发执行的。标记过程会记录弱引用情况,还会计算出每个分段的对象存活数据(比如分段内存活对象所占的百分比)。
- Stop-The-World,然后 重新标记(Remark)。此阶段重新标记前面提到的STAB队列中的对象(例子中的C对象),还会处理弱引用。
- 回收百分之百为垃圾的内存分段。注意:不是百分之百为垃圾的内存分段并不会被处理,这些内存分段中的垃圾是在混合回收过程(Mixed GC)中被回收的。由于Humongous对象会独占整个内存分段,如果Humongous对象变为垃圾,则内存分段百分百为垃圾,所以会在第一时间被回收掉。
- 恢复应用程序线程的执行。
G1垃圾回收器的运行过程大致可划分为以下四个步骤:
- 初始标记(initial mark),标记了从GC Root开始直接关联可达的对象。STW(Stop the World)执行。
- 并发标记(concurrent marking),和用户线程并发执行,从GC Root开始对堆中对象进行可达性分析,递归扫描整个堆里的对象图,找出要回收的对象。
- 最终标记(Remark),STW,标记再并发标记过程中产生的垃圾。
- 筛选回收(Live Data Counting And Evacuation),制定回收计划,选择多个Region 构成回收集,把回收集中Region的存活对象复制到空的Region中,再清理掉整个旧 Region的全部空间。需要STW。
ZGC工作过程
ZGC(Z Garbage Collector)的工作过程与G1类似,但有以下不同:
- ZGC只有三个STW阶段:初始标记,再标记,初始转移。
- 初始标记和初始转移分别都只需要扫描所有GC Roots,其处理时间和GC Roots的数量成正比,一般情况耗时非常短。
- 再标记阶段STW时间很短,最多1ms,超过1ms则再次进入并发标记阶段。
- ZGC几乎所有暂停都只依赖于GC Roots集合大小,停顿时间不会随着堆的大小或者活跃对象的大小而增加。
- 与ZGC对比,G1的转移阶段完全STW的,且停顿时间随存活对象的大小增加而增加。
参考资料
- JVM垃圾回收详解(重点) | JavaGuide
- 肝了一周,彻底弄懂了 CMS收集器原理,这个轮子造的真值!-腾讯云开发者社区-腾讯云
- https://www.cnblogs.com/yufengzhang/p/10571081.html
- G1垃圾回收器的工作流程-阿里云开发者社区
- 新一代垃圾回收器ZGC的探索与实践 - 美团技术团队
热门推荐
2024年央行多次降准降息,个人理财如何应对新机遇
冬至前夕,多地社区开展包饺活动,传承文化凝聚邻里情
如何保护环境? – 影响日常的简单步骤
家长必读:如何帮助孩子克服空间感障碍
2024心理咨询师考试:《心理咨询概论》高频考点速览
10句“彩虹屁”,夸出孩子的内驱力,建议家长收藏
贵州“村超”背后的多彩文化
贵州村超引爆榕江乡村足球热潮
卡卡加盟贵州“村超”,引爆乡村足球热潮
乾隆御用刀亮相承德博物馆,展现康乾盛世辉煌
青龙白虎朱雀玄武:从方位神到东亚文化符号
石雕四大神兽广泛应用建筑艺术领域,成传统文化重要符号
青龙白虎朱雀玄武:古代中国的四方守护神
哈尔滨医保转移全流程:5步完成外地医保转入
盐酸氟桂利嗪胶囊:科学用药指南
盐酸氟桂利嗪+布洛芬:偏头痛治疗的新选择
盐酸氟桂利嗪胶囊副作用知多少?
强力定眩片联合氟桂利嗪,有效缓解眩晕症状
一文详解医保缴费年限查询:线上操作更便捷
医保缴费年限不足影响待遇,及时补缴可避免损失
中国城市化:从古代政治中心到现代经济引擎,面临转型挑战
峨眉山月歌写作背景及赏析
让孩子做家务、帮同学、懂感恩:这位妈妈的育儿秘诀
葡萄樱桃居首,五种水果助力术后恢复
广东湛江鼎龙湾及周边必游景点全攻略
广东自驾游攻略:粤西地区7天、5天、4天路线详解
新车保养全攻略:从机油到内饰,这些关键环节不容忽视
26个实用且天才的省钱法
妥布霉素地塞米松滴眼液使用指南:内眼角发痒怎么办?
掌握这些技巧,用霰弹枪在荒野的召唤中高效刷分