Java性能优化-垃圾回收算法-理解CMS回收器

垃圾回收算法

理解 CMS回收器

三个基本操作
1.回收新生代(同时暂停所有的应用线程)
2.运行并发周期来清理老年代数据
3.如果有必要则FULL GC压缩老年代
当发生新生代回收 ,
如果老年代没有足够的空间容纳晋升的对象则执行FULL GC,所有线程停止开始清理老年代中的垃圾对象
晋升失败的原因还有可能是内存存在碎片化而导致失败
FULL GC 在JDK8中不是并发
当元空间被填满并需要回收,CMS不会回收元空间,如果填满了需要full gc来处理未被任何引用的类
默认情况下CMS不会回收元空间

针对并发模式失败的优化

优化CMS目的是确保不会发生并发 模式失败或者晋升失败
并发模式失败是因为CMS清理老年代的速度不顾快,并发清理G1
执行新生代回收,CMS计算出没有足够的空间容纳晋升对象,所以先回收老年代
避免并发模式失败:G1从这些现象中发现了优化的方式
1.让老年代空间大一点

2.更频繁的运行后台线程清理
-XX:CMSInitiatingOccupancyFraction=N 默认70%
-XX:+UseCMSInitiatingOccupancyOnly 默认false
并发处理周期会在老年代的70%开始处理

3.使用更多的后台线程
增加后台线程公式
ConcGCThreads = (3 + ParallelGCThreads) / 4

tips:

避免并发模式失败是实现CMS最佳性能的关键
避免失败的最简单的方法也是最复杂的计算方法是增加堆的大小
调整提前启动并发后台线程和增加后台线程数量

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

P("Struggler") ?

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值