CMS回收器

转载学习,原文路径:https://baijiahao.baidu.com/s?id=1566263327225640&wfr=spider&for=pc

1.常用的垃圾回收器:

Serial:串行收集器,单线程处理垃圾回收工作,执行垃圾回收时所有线程都将暂停。

Parallel:并行收集器,在多CPU下执行,是串行收集器的多线程版本,利用了多核处理器的优势,适用于吞吐量要求较高、多CPU、对系统响应时间无要求的系统应用,如后台数据处理,科学计算等。

ParallelOld:老年代的Parallel版本

ConcMarkSweep:并发收集器,部分操作与用户线程并发执行

CMSIncrementalMode:CMS收集器变形,是增量的垃圾回收器,在并发标记和并发清理时交替运行垃圾回收和用户线程

G1:面向服务器端应用的垃圾回收器,将逐步替代CMS

CMS算法详细介绍

ConcurrentMark-Sweep垃圾回收器特别适用于对系统响应时间要求较高的系统中,如页面请求/web服务器,适用于前段业务系统,最小化系统停顿时间,用于老年代的GC。

从英文名字就可以看出它采用的基础算法是:标记-清除算法。

CMS在应用不停顿的情况下使用独立的线程进行垃圾回收,在每个老年代回收周期中需要短暂停顿两次,初始标记阶段和重新标记阶段。

2.CMS执行过程分为:初始标记-并发标记-并发预清理-重新标记-并发清理-重置


其中的1,3两次标记需要暂停所有的应用程序线程的。

第一次暂停从root对象开始标记存活的对象,这个阶段称为初始标记;

第二次暂停是在并发标记之后,暂停所有应用程序线程,重新标记并发标记阶段遗漏的对象(在并发标记阶段结束后对象状态的更新导致)。第一次暂停会比较短,第二次暂停通常会比较长,并且remark这个阶段可以并行标记。

并发标记、并发清除、并发重设阶段的所谓并发,是指一个或者多个垃圾回收线程和应用程序线程并发地运行,垃圾回收线程不会暂停应用程序的执行,如果你有多于一个处理器,那么并发收集线程将与应用线程在不同的处理器上运行,显然,这样的开销就是会降低应用的吞吐量。Remark阶段的并行,是指暂停了所有应用程序后,启动一定数目的垃圾回收进程进行并行标记,此时的应用线程是暂停的。

CMS相关参数

1、启用CMS:-XX:+UseConcMarkSweepGC。

2。CMS默认启动的回收线程数目是(ParallelGCThreads+3)/4),如果你需要明确设定,可以通过-XX:ParallelCMSThreads=20来设定,其中ParallelGCThreads是年轻代的并行收集线程数

3、CMS是不会整理堆碎片的,因此为了防止堆碎片引起fullgc,通常会开启CMS阶段进行合并碎片选项:-XX:+UseCMSCompactAtFullCollection,开启这个选项一定程度上会影响性能

4.为了减少第二次暂停的时间,开启并行remark:-XX:+CMSParallelRemarkEnabled。如果remark还是过长的话,可以开启-XX:+CMSScavengeBeforeRemark选项,强制remark之前开始一次minorgc,减少remark的暂停时间,但是在remark之后也将立即开始又一次minorgc。

5.为了避免Perm区满引起的fullgc,建议开启CMS回收Perm区选项:

+CMSPermGenSweepingEnabled-XX:+CMSClassUnloadingEnabled

6.默认CMS是在tenuredgeneration沾满68%的时候开始进行CMS收集,如果你的年老代增长不是那么快,并且希望降低CMS次数的话,可以适当调高此值:

-XX:CMSInitiatingOccupancyFraction=80

这里修改成80%沾满的时候才开始CMS回收。

7.年轻代的并行收集线程数默认是(cpu<=8) ? cpu : 3+((cpu*5)/8),如果你希望降低这个线程数,可以通过-XX:ParallelGCThreads=N来调整。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值