JVM垃圾收集器(三) —— 老年代垃圾收集器

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Lin_wj1995/article/details/79978052

上一篇文章讲了新生代的垃圾收集器,这篇文章我们来讲讲老年代的垃圾收集器

Serial Old收集器

1、说明:一个单线程收集器,使用“标记-整理”算法。其实就是Serial收集器老年代的版本

2、优缺点 和 运行图 和Serial收集器一样,所以这里就不多赘述了


Parallel Old收集器

1、说明:Parallel Old是Parallel Scavenge收集器的老年代版本,使用多线程和“标记-整理”算法。

2、在注重吞吐量以及CPU资源敏感的场合,都可以优先考虑Parallel Scavenge加Parallel Old收集器

Parallel Scavenge/Parallel Old收集器运行示意如下所示:
这里写图片描述


CMS收集器

1、说明:CMS(Concurrent Mark Sweep)收集器是一种以获取 最短回收停顿时间 为目标的收集器。采用的是是基于“标记—清除”算法实现的。主要是用在互联网网站或者B/S系统的服务端上。

2、执行步骤:

  • 初始标记(CMS initial mark):需要“STW”,仅仅只是标记一下GC Roots能直接关联到的对象,速度很快;
  • 并发标记(CMS concurrent mark):可以并发操作,主要是进行GC ROOT Tracing,有点慢,需要占用很多CPU资源
  • 重新标记(CMS remark):需要“STW”,主要是针对并发标记期间重新进入到老年代的数据,这个阶段比初始标记时间长,但是远比并发标记短
  • 并发清除(CMS concurrent sweep):就是清除数据,由于采用的是标记清除的算法,所以会产生一些碎片

3、优点:优点是并发收集(用户线程可以和GC线程同时工作),停顿小

4、缺点:占用CPU资源;且由于并发清除时时并发的,所以会产生浮动垃圾,只能由下一次的GC进行清除,这个没办法

CMS收集器运行示意图:
这里写图片描述


本文的内容和图片参考自:《深入理解Java虚拟机:JVM高级特性与最佳实践》

猜你喜欢

转载自blog.csdn.net/Lin_wj1995/article/details/79978052