JVM垃圾收集器之CMS垃圾收集器和G1垃圾收集器

CMS垃圾收集器

CMS垃圾收集器

CMS GC的英文名为:"Mostly Concurrent Mark and Sweep Garbage Collector" (最大-并发-标记-清除-垃圾收集器)。

作用范围: 老年代

算法: 并发标记清除算法。

启用参数:-XX:+UseConMarkSweepGC默认回收线程数:(处理器核心数量 + 3)/4

Java9之后使用CMS垃圾收集器后,默认年轻代就为ParNew收集器,并且不可更改,同时JDK9之后被标记为不推荐使用,JDK14就被删除了。

设计目标/优点:避免在老年代垃圾收集时出现长时间的卡顿,主要通过两种手段来达成此目标:

第一,不对老年代进行整理,而是使用空闲列表(free-list)来管理内存空间的回收

第二,在mark-and-sweep(标记-清除)阶段的大部分工作和应用线程一起并发执行。

适用场景:

GC过程短暂,低延迟,适合对延迟要求较高的系统

如果服务器是多核CPU,并且主要调优目标是降低GC停顿导致的系统延迟,那么使用CMS是个很明智的选择。通过减少每一次GC停顿的时间,很多时候会直接改善用户体验。因为多数情况下有部分CPU资源被垃圾回收器线程消耗,所以在CPU资源受限的情况下,CMS GC会比并行GC的吞吐量差一些(对于绝大部分系统,这个吞吐和延迟的差别应该都不明显)

在实际情况中,进行老年代的并发回收时,可能会伴随多次年轻代的minor GC。在这种情况下full GC的日志中就会掺杂着多次minor GC事件

CMS GC的几个大阶段

1、初始标记(CMS initial mark)

2、并发标记(CMS concurrent mark)

3、重新标记(CMS remark)

4、并发清除(CMS concurrent sweep)

其中:1、3会STW

G1收集器

G1待更新

相关推荐
wdfk_prog2 小时前
嵌入式面试真题第 10 题:高优化等级下共享状态可见性、内存模型与系统级同步设计
java·linux·开发语言·面试·职场和发展·架构·c
卓怡学长2 小时前
w255基于springboot仓库管理系统
java·数据库·spring boot·spring·intellij-idea
这个DBA有点耶5 小时前
SQL调优进阶:从“优化一条SQL”到“优化一个系统”的思维升级
java·大数据·数据库·sql·程序人生·dba·改行学it
许彰午5 小时前
95_Python内存管理与垃圾回收
开发语言·python
csdn2015_6 小时前
springboot读取配置的方法
java·spring boot·spring
多加点辣也没关系6 小时前
JavaScript|第13章:原始类型的方法
开发语言·javascript·ecmascript
এ慕ོ冬℘゜6 小时前
深入理解 JavaScript 事件体系:Window、鼠标与键盘事件详解
开发语言·javascript·okhttp
AOwhisky6 小时前
下一代容器来了?Docker 宣布原生支持 WebAssembly
java·运维·docker·容器·rust·wasm
chouchuang8 小时前
day-030-综合练习-笔记管理器
开发语言·笔记·python
云云只是个程序马喽8 小时前
海外短剧平台搭建方案:私有化源码系统选型|云微短剧系统技术架构拆解
java·php