关于CMS垃圾回收器和G1垃圾回收器

1 篇文章 0 订阅

G1垃圾回收器


设置参数方面:


启动G1垃圾回收器:-XX:UseG1GC
可以设置region的大小:-XX:G1HeapRegionSize 
"大小默认是堆区的1/2000,可以设置的范围是1~32MB之间"
设置期望达到的最大GC停顿时间指标(不保证一定达到):-XX:MaxGCPauseMillis

特点

*并行+并发,*分代+分区(region)
*标记压缩
低延迟
*每个region都具有记忆集(Remember Set):避免全局扫描,
jdk7出现,jdk9默认开启
*作用于老年代,新生代
新生代(Eden,S0,S1),老年代(O区),大对象存储区(H区)


标记的五个阶段:


1.初始化标记阶段:标记出GC Roots能直接关联对象
2.根区域扫描:扫描并标记S区到达O区的对象,在Young GC前完成
3.并发标记:和应用程序并发执行,发现区域中的对象全是垃圾则这个区域会进行回收
4.再次标记:修正并发标记时用户程序继续运作而导致标记产生变动的对象
5.清除阶段:清除掉标记已经判断死亡的对象,释放内存空间,是部分并发的

回收过程:
1.年轻代GC(Young GC):并行(独占式),从年轻代区间移动存活的对象到survivor区或者老年代两个区间中
2.老年代进行并发标记(Concurrent Marking):当堆内存使用率达到45%时,开始执行并发标记过程
3.混合回收(Mixed GC):回收全部年轻代和部分老年代,老年代中的存活对象会被转移到老年代的空闲区间,然后根据垃圾价值进行回收
4.Full GC:当用户线程制造垃圾的频率远大于region回收的速度时触发Full GC(独占式,单线程)


优点:


1.低延迟
2.使用标记压缩没有内存碎片
3.可预测的停顿时间模型(软实时):能够根据region里的垃圾堆积的价值进行回收,优先回收价值最大的,能够提高收集效率

缺点:


1、记忆集RememberSet会占用比较大的内存,因此不建议在小内存下使用G1,推荐至少6G
2、对CPU的负载可能会更大一点
3、由于采用复制算法,GC垃圾回收过程对象复制转移会占用较多的内存,更容易出现回收失败的问题
4、可能会降低吞吐量

适用场景:

1.堆中超50%过是活动的数据
2.对象分配和晋升频率很大
3.GC停顿时间过长:大于0.5~1S

CMS垃圾收集器


设置参数方面:


1.启动CMS垃圾收集器:+UseConcMarkSweepGC
2.设置堆内存使用率的阈值:-XX: CMSInitiatingoccupanyFraction
3.指定在执行完FullGC后对内存空间进行压缩整理:-XX:+UseCMSCompactAtFullcollection
4.设置在执行多少次Full cC后对内存空间进行压缩整理:-XX:CMSFullGCsBeforeCompaction
5.设置CMS的线程数量:-XX:ParallelCMSThread

特点:


*并发,*分代
低延迟
*标记清除
jdk1.5出现jdk14移除
作用于年轻代


标记的四个阶段


1.初始标:标记出GC Roots能直接关联对象
2.并发标记:从GC Roots的直接的关联对象开始遍历整个对象图的过程
3.重新标记:修正并发标记时用户程序继续运作而导致标记产生变动的对象
4.并发清除:清除掉标记已经判断死亡的对象,释放内存空间


优点:


1.并发
2.低延迟


缺点:


1.空间使用率较低:使用标记清除会产生内存碎片
2.需要空间预留:一边处理垃圾,一边处理用户线程

适用场景:


1.关注服务的响应速度,希望停顿时间更短
2.CMS不是独占的回收器
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值