2020-03-18

垃圾收集器详解

CMS收集器

CMS收集器是一种以获取最短回收停顿时间为目标的收集器。目前很大一部分的Java应用集中在互联网站或者B/S系统的服务端上,这类应用有其中是服务的响应速度,希望系统停顿时间最短,以给用户带来较好的体验。CMS收集器就非常符合这类应用的需求。

CMS收集器是基于“标记-清除”算法实现的,它的运作过程相对于前面集中收集器来说更复杂一些,整个过程分为4个步骤,包括

  • 初始标记
  • 并发标记
  • 重新标记
  • 并发清除
    其中,初始标记、重新标记这两个步骤仍然需要“Stop The World”。初始标记仅仅只是标记一下GC Roots能直接关联到的对象,速度很快,并发标记阶段就是进行GC Roots Tracing的过程,而重新标记阶段则是为了修正并发标记期间因用户程序继续运作而导致标记产生变动的那一部分对象的标记记录,这个阶段的停顿时间一般会比初始标记阶段稍长一些,但远比并发标记的时间短。

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

CMS是一款优秀的收集器,它的主要优点在名字上已经体现出来了:并发收集、低停顿,Sun公司的一些官方文档中也称之为并发低停顿收集器。但他还是有以下几个明显的缺点:

  1. CMS收集器对CPU非常敏感。
  2. CMS收集器无法处理浮动垃圾。
  3. CMS是基于“标记-清除”算法实现的收集器,这意味着收集结束会有大量空间碎片产生。
    ————————————————
    版权声明:本文为CSDN博主「木兮同学」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/qq_36221788/article/details/99630196

你可能感兴趣的:(2020-03-18)