JVM学习笔记4-垃圾收集器介绍

1.Serial收集器/Serial Old收集器
Serial 收集器:单线程收集器,当GC时会 stop the world,使用复制算法。
Serial Old收集器:单线程收集器,当GC时会 stop the world,只不过是用在老年代,用的是标记-整理算法。
stop the world:意思是当serial收集器运行时其他处理线程全部停下来等待serial收集器GC完成。
优点简单而高效,同时是单线程所以没有了线程切换的开销。
缺点很明显,stop the world会带来停顿感。用户体验差。


2.ParNew收集器
ParNew收集器就是Serial收集器的多线程版本(多线程并行)。可以和CMS(Concurrent Mark Sweep-老年代的并发收集器)组合使用。
并行:多个垃圾收集线程同时工作,其他用户线程等待。
并发:用户线程和垃圾收集线程同时工作,并发不一定是同时工作,也可能是轮流工作。

3.Parallel Scavenge收集器/Parallel Old收集器
Parallel Scavenge收集器:一个新生代收集器,多线程处理,更关注CPU吞吐量和GC停顿时间,可以自适应调整策略。
Parallel Old收集器:Parallel Scavenge收集器对应的老年代收集器,

4.CMS收集器
Concurrent Make Sweep,顾名思义就是并发收集器,使用的是make-sweep标记-清除算法,是一个老年代的收集器,是为了获取最短停顿时间为目标的收集器,可以带来更好的用户体验。
CMS GC分为4个步骤:
初始标记:会stop the world
并发标记:
重新标记:会stop the world,为了修正并发标记时初始标记可能发生变动的那一部分对象的标记记录。
并发清除:
CMS的缺点如下:
CMS无法处理浮动垃圾(因为是并发清除,所以CMS在清除的时候用户线程还在工作,可能会产生新的垃圾对象,这新产生的垃圾对象就是浮动垃圾,CMS本次GC不会清除),也是由于并发关系,所以CMS会预留一部分空间给用户线程使用,因为其他的老年代收集器基本都是等老年代空间满时进行FULL GC,所以CMS默认在老年代空间到68%的时候就会FULL GC,这里可能会发生预留的空间不足以存放用户线程新产生的对象,所以会发生Concurrent Mode Failure,这个时候就会临时启用Serial Old收集器再一次进行FULL GC,这样反而停顿的时间变长了。
CMS使用的是标记-清除算法,这里在垃圾收集算法里讲过优缺点,就不阐述了。

5.G1收集器
Garbage First收集器,使用的是标记-整理算法,它可以精确控制停顿时间,即能让用户控制在长度为M毫秒的时间片段内,GC的时间不超过N毫秒。
G1收集器可以实现不牺牲吞吐量的前提下完成低停顿的垃圾回收,这是因为它避免了全区域的垃圾收集,之前的收集器都是回收整个新生代/老年代,而G1是将整个堆(新生代/老年代)划分为多个独立区域,并跟踪这些区域,在后台维护一个优先列表,每次根据允许的GC时间将优先回收垃圾最多的区域(G1名称的由来)。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值