G1收集器和CMS收集器的理解及其区别

CMS收集器

目标:获取最短回收停顿时间。

优点:并发收集,低停顿

缺点:

①对处理器资源非常敏感:在并发阶段,它虽然不会导致用户线程停顿,但却会因为占用了一部分线程而导致应用程序变慢,降低总吞吐量。

②无法处理“浮动垃圾”:CMS的并发标记和并发清除阶段用户线程不会停止,会继续产生垃圾对象,这部分垃圾是出现在标记之后的,CMS无法当次处理掉,只能等下次。还有就是由于垃圾收集阶段用户线程没有停止,需要预留足够空间给用户线程使用,因此CMS不能像其他收集器一样等到老年代几乎完全填满后在进行收集。

互联网网站或基于浏览器的B/S系统通常会比较关注服务的响应速度(能够给用户更好的交互体验),CMS就很符合这类应用的要求。

基于标记清除。

③产生空间碎片:CMS基于标记-清除算法,垃圾收集结束后可能会有大量空间碎片产生。

运作过程比其他收集器更复杂。分为四步:

①初始标记(Stop-The-World):标记GC Root能够直接关联到的对象,速度很快。

②并发标记:从GC Roots的直接关联对象开始遍历整个对象图的过程,耗时长,但是不需要停顿用户线程,可以与垃圾收集线程一起并发运行。

③重新标记(Stop-The-World):因为并发标记不需要stop-the-world,所以并发标记期间,用户程序继续运作导致一部分对象的标记产生变动,重新标记就是为了修正这部分对象的标记记录。停顿时间会比初始标记长一些

④并发清除:,清理删除掉标记阶段判断的已经死亡的对象,由于不需要移动存活对象,所以这个阶段也是可以与用户线程同时并发的。

整个过程中耗时最长的并发标记和并发清除阶段中,垃圾收集器线程都可以与用户线程一起工作,所以从总体上来说,CMS收集器的内存回收过程是与用户线程一起并发执行的。

Garbage First收集器

简介:

简称G1收集器,是垃圾收集器技术发展历史上的里程碑式的成果,开创了收集器面向局部收集的设计思路和基于Region的内存布局形式,虽然G1还是遵循分代收集理论,但是它不在坚持固定大小以及固定数量的分代区域划分,而是把连续的java堆划分为多个大小相等的独立区域(Region),每个Region都可以根据需要去扮演新生代的Eden空间,Survivor空间或者老年代空间。

G1收集器是一款面向服务端的垃圾收集器,专门针对拥有多核处理器和大内存的机器,满足高吞吐的同时,还满足GC停顿的时间尽可能短

JDK9之后,G1取代Parallel Scavenge加Parallel Old组合,成为服务端模式下默认垃圾收集器,取代了CMS。

G1收集器和CMS的区别:

首先是适用范围不一样,CMS是老年代收集器,可以配和新声代的Serial和ParNew收集器一起使用,而G1收集器收集范围是老年代和新生代,不需要结合其他收集器。还有就是使用的算法不同,CMS上使用的是标记-清除算法,G1使用的是标记-整理和标记-复制算法。还有就是CMS收集器会产生内存碎片,G1不会产生,还有回收过程也不一样,CMS:初始标记--->并发标记--->重新标记--->标记清除,G1:初始标记--->并发标记--->最终标记--->筛选回收,从用户线程停顿时间来说,CMS会停顿两次(初始标记和重新标记),G1会停顿3次(初始标记,最终标记,筛选回收)

CMS 是一个整体,再对整体进行操作的时候,整体都得停掉,而G1收集器是把存储分成一块一块的小区域,这些小区域每一块可以独立回收内存,回收一块的时候,其他区域的程序依旧会正常运行,不会产生 stop the world,所以 G1 收集器比较适合那种大内存的服务器。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值