当前位置:网站首页>CMS垃圾收集器和G1垃圾收集器
CMS垃圾收集器和G1垃圾收集器
2022-04-22 19:01:00 【李昕羽】
CMS
CMS(Concurrent Mark Sweep)收集器是一种以获取最短回收停顿时间为目标的老年代收集器。CMS收集器与之前的垃圾收集器最大的特点就是它可以并发清除垃圾。
他的工作流程如下:
- 初始标记(CMS initial mark)
- 并发标记(CMS concurrent mark)
- 重新标记(CMS remark)
- 并发清除(CMS concurrent sweep)
- 其中初始标记、重新标记这两个步骤仍然需要“Stop The World”。初始标记仅仅只是标记一下GCRoots能直接关联到的对象,速度很快;
- 并发标记阶段就是从GC Roots的直接关联对象开始遍历整个对象图的过程,这个过程耗时较长但是不需要停顿用户线程,可以与垃圾收集线程一起并发运行;
- 而重新标记阶段则是为了修正并发标记期间,因用户程序继续运作而导致标记产生变动的那一部分对象的标记记录(增量更新),这个阶段的停顿时间通常会比初始标记阶段稍长一些,但也远比并发标记阶段的时间短;
- 最后是并发清除阶段,清理删除掉标记阶段判断的已经死亡的对象,由于不需要移动存活对象,所以这个阶段也是可以与用户线程同时并发的。由于在整个过程中耗时最长的并发标记和并发清除阶段中,垃圾收集器线程都可以与用户线程一起工作,所以从总体上来说,CMS收集器的内存回收过程是与用户线程一起并发执行的。
因为CMS垃圾收集器要求低延迟,在清理垃圾的时候要做到并发。所以它采用的是标记-清除算法。 这种算法必然回导致产生大量的空间碎片。
这是他的一个缺点。
他还有两个缺点就是:
- 对处理器资源非常敏感。
- 无法处理浮动垃圾。
Garbage First(G1)收集器
Garbage First(简称G1)收集器是垃圾收集器技术发展历史上的里程碑式的成果,它开创了收集器面向局部收集的设计思路和基于Region的内存布局形式。
特点:
- 全功能的垃圾收集器(老年代新生代都可使用)
- 把连续的Java堆划分为多个大小相等的独立区域(Region),每一个Region都可以根据需要,扮演新生代的Eden空间、Survivor空间,或者老年代空间。
- 垃圾收集的目标范围并不像其他垃圾收集器一样要么是整个新生代(Minor GC),要么就是整个老年代(Major GC),再要么就是整个Java堆(Full GC)。它可以面向堆内存任何部分来组成回收集(Collection Set,一般简称CSet)进行回收,衡量标准不再是它属于哪个分代,而是哪块内存中存放的垃圾数量最多,回收收益最大,这就是G1收集器的Mixed GC模式。
- 能够支持指定在一个长度为M毫秒的时间片段内,消耗在垃圾收集上的时间大概率不超过N毫秒这样的目标。
- 让G1收集器去跟踪各个Region里面的垃圾堆积的“价值”大小,价值即回收所获得的空间大小以及回收所需时间的经验值,然后在后台维护一个优先级列表,每次根据用户设定允许的收集停顿时间(使用参数-XXMaxGCPauseMillis指定,默认值是200毫秒),优先处理回收价值收益最大的那些Region。
- 整体用的标记-整理算法,每个region间用的标记-清除算法。
- 它的每个Region都维护有自己的记忆集,来解决跨代引用。
- 而对于那些超过了整个Region容量的超级大对象,将会被存放在N个连续的Humongous Region之中,G1的大多数行为都把Humongous Region作为老年代的一部分来进行看待
工作流程如下:
- 初始标记(Initial Marking):仅仅只是标记一下GC Roots能直接关联到的对象,并且修改TAMS指针的值,让下一阶段用户线程并发运行时,能正确地在可用的Region中分配新对象。这个阶段需要停顿线程,但耗时很短,而且是借用进行Minor GC的时候同步完成的,所以G1收集器在这个阶段实际并没有额外的停顿。
- 并发标记(Concurrent Marking):从GC Root开始对堆中对象进行可达性分析,递归扫描整个堆里的对象图,找出要回收的对象,这阶段耗时较长,但可与用户程序并发执行。当对象图扫描完成以后,还要重新处理SATB记录下的在并发时有引用变动的对象。
- 最终标记(Final Marking):对用户线程做另一个短暂的暂停,用于处理并发阶段结束后仍遗留下来的最后那少量的SATB记录。(原始快照)
- 筛选回收(Live Data Counting and Evacuation):负责更新Region的统计数据,对各个Region的回收价值和成本进行排序,根据用户所期望的停顿时间来制定回收计划,可以自由选择任意多个Region构成回收集,然后把决定回收的那一部分Region的存活对象复制到空的Region中,再清理掉整个旧Region的全部空间。这里的操作涉及存活对象的移动,是必须暂停用户线程,由多条收集器线程并行完成的。
G1收集器除了并发标记外,其余阶段也是要完全暂停用户线程的。包括筛选回收。G1不是仅仅面向低延迟,停顿用户线程能够最大幅度提高垃圾收集效率,为了保证吞吐量所以才选择了完全暂停用户线程的实现方案。
吞吐量 = 执行用户线程的时间/(执行用户线程时间 + 执行gc线程时间)。
版权声明
本文为[李昕羽]所创,转载请带上原文链接,感谢
https://blog.csdn.net/qq_54494937/article/details/122600431
边栏推荐
- 【最佳实践】巡检项:内容分发网络(CDN)开启URL鉴权
- Video knowledge points (16) - how to convert y4m files into YUV files?
- Introduction to Alibaba micro service component Sentinel
- 为什么不能直接在 useEffect 中使用 async
- With the rapid and savage growth of single chip microcomputer embedded industry, the demand of various posts also increases
- SQL命令 DISTINCT
- [TCP] TCP three handshakes and four waves
- 2019-11-19解决Go test执行单个测试文件提示未定义问题
- One piece of data meets all data scenarios? Tencent cloud data Lake solution and DLC kernel technology introduction
- Model Inspector - software model static specification inspection tool
猜你喜欢

【自我救赎--牛客网Top101 4天刷题计划】 第一天 热身运动

How to build the campus running platform?
![[network security] duomics variable coverage vulnerability from white box test to actual combat](/img/cd/876cad6523e923d5aaada65beb54a2.png)
[network security] duomics variable coverage vulnerability from white box test to actual combat

Introduction to Alibaba micro service component Sentinel

Im instant messaging development how to design a database that can support millions of concurrent users

Better than SQL, another domestic database language was born

Some indicators in text classification

华为设备配置策略路由引流到旁挂防火墙

模块代码的类型描述文件

Storage network request log
随机推荐
Simulation experiment of Arduino uno steering gear
SQL command distinct
【TCP】TCP 三次握手与四次挥手
2020-01-14 dapp开发环境搭建
原来,这才是开发者打开世界读书日的正确姿势
数据分析师职业规划——数据分析师的职业焦虑与未来发展
2020-09-08 remove comments from JS code
Better than SQL, another domestic database language was born
Bluetooth shield / cervical massage instrument / mini charger / probe thermometer, segment code LCD display driver ic-vk1088b qfn32 4 * 4 ultra small volume, 22seg * 4com, and can enter the power savi
ReadLine analysis log
2022 simulated examination platform operation of loader driver (special type of work in construction) Certificate
postgre创建序列并绑定到表字段
Secretary of the national security and Defense Commission of Ukraine: it is impossible to restore Ukraine's nuclear status at present
RHCE-ansible
RHCE-ansible
C#——连接数据库语句
单片机红外模块知识分享,理论是日后实战的基础
Simple implementation of linear regression
Introduction notes to PHP zero Foundation (12): array
Flink best practices: using tdsql connector (Part 1)