版权声明:本文为博主原创文章,未经博主允许不得转载。 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高级特性与最佳实践》