常用的垃圾回收器

1、常见的垃圾回收器介绍:
在这里插入图片描述
如果说收集算法是内存回收的⽅法论,那么垃圾收集器就是内存回收的具体实现。现在为⽌还没有最好的垃圾收集器出现,更加没有万能的垃圾收集器,我们能做的就是根据具体应⽤场景选择适合⾃⼰的垃圾收集器。
(1)serial 收集器(串行)
单线程收集器,"单线程"的意义不仅仅意味着使用一条垃圾收集线程去完成垃圾收集工作,更重要的是在进行垃圾收集工作的时候必须要停掉其它的工作线程(stop the world)直到它收集结束。(新生代采用 复制算法,老年代采用 标记-整理算法 )
优点:简单高效,不需要进行线程交互

(2)ParNew 收集器(吞吐量优先)
其实就是serial收集器的多线程版本,除了使用多线程进行垃圾收集以外,其余行为(控制参数,收集算法,回收策略等)和serial收集器都是一样的。(新生代采用 复制算法,老年代采用 标记-整理算法 )
适用:
堆内存较大,多核CPU。让单位时间内,STW的占比最小

(3) CMS 收集器(响应时间优先)
CMS(Concurrent Mark Sweep)收集器是⼀种以获取最短回收停顿时间为⽬标的收集器。它⾮常符合在注重⽤户体验的应⽤上使⽤。第⼀次实现了让垃圾收集线程与⽤户线程(基本上)同时⼯作。(采用 标记-清除 算法 )
工作步骤:
a 初始标记:暂停所有的其他线程,并记录下直接与 root 相连的对象,速度很快 ;
b 并发标记:同时开始GC和用户线程⽤⼀个闭包结构去记录可达对象。但在这个阶段结束,这个闭包结构并不能保证包含当前所有的可达对象。因为⽤户线程可能会不断的更新引⽤域,所以GC 线程⽆法保证可达性分析的实时性。所以这个算法⾥会跟踪记录这些发⽣引⽤更新的地⽅。
c 重新标记:重新标记阶段就是为了修正并发标记期间因为⽤户程序继续运⾏⽽导致标记产⽣变动的那⼀部分对象的标记记录,这个阶段的停顿时间⼀般会⽐初始标记阶段的时间稍⻓,远远⽐并发标记阶段时间短
d 并发清除:开启用户线程,同时GC线程开始对未标记的区域进行清扫
适用:
堆内存较大,多核CPU。STW的时间最少

(4)G1 收集器
G1 (Garbage-First) 是⼀款⾯向服务器的垃圾收集器,主要针对配备多颗处理器及⼤容量内存的机器. 以极⾼概率满⾜ GC 停顿时间要求的同时,还具备⾼吞吐量性能特征。
特点:
a 并行与并发,利用多核环境的特点,充分利用cpu,使用多个cpu来减少STW的时间。G1收集器通过办法方式在GC的同时运行用户线程。
b 分代收集,虽然G1不需要其它的收集器配合就能管理整个的GC堆,但是还是保留了分代的概念。
c 空间的整合,G1采用的 标记-整理算法,(从局部上来看是基于复制算法实现)。不同于CMS的 标记-清除算法。
d 可预测的停顿,CMS和G1都关注于减低停顿时间,G1的最大特点就是能建立可预测的停顿时间的模型,能让使用者明确指定在一个长度为M毫秒的时间片段内。

工作步骤:
a 初始标记
b 并发标记
c 最终标记
d 筛选回收
(G1收集器后台维护了一个优先列表,每次根据允许的收集时间,优先选择回收价值最大的块,这也就是Garbage-First的由来),这种Region划分内存空间,以及有优先级的区域回收方式,保证了G1收集器能在有限时间内尽到最可能大的效率。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值