(三)CMS Collector

有些资料中,为区别parallel collector ,将应用与gc并发成为并行,在接下来的文章中,仍称为并发。

—XX:useConcMarkSweepGC,可以用于minor gc和major gc

cms在gc时,也会有两次短暂停,垃圾收集线程与应用线程并发

并发失败:

如果无法及时清理内存和分配内存,也会暂停整个应用。

OutOfMemoryException:

如果超过98%的时间用来gc,但每次恢复内存不足2%,会抛出该异常。与parallel collector不同,

98%时间的统计并不包括‘并发收集’的时间,只计算停止应用线程来收集垃圾的时间

浮动垃圾:

gc线程与应用线程并发,会导致一部分对象在被标记为活对象之后,在本次gc结束前,成为了死对象。这些死对象就是所谓浮动垃圾,在下一次gc时会被清理。因此建议,为浮动垃圾多分配20%的老年代。

暂停:

cms在一个major垃圾收集周期中,会暂停两次,两次都是对根引用直接可达的对象进行标记,因为是应用线程与gc 线程并发,所以,标记两次,以确保正确。

并发阶段:

在两次暂停之间,生成了可达对象(这次包括了非直接可达对象)的图,第二次暂停后,开始清除垃圾。

生成图和清除垃圾都是与应用并发的,此时,应用不会停止,但是吞吐量会下降。

并发收集:

串行垃圾收集器在老年代满了之后,暂停引用开始major gc。cms则会预估垃圾回收和老年代即将填满的时间,在老年代装满之前开始major gc。cms如果因为并发失败引发的暂停开销会比串行收集器的暂停开销更大。

-XX:CMSInitiatingOccupancyFraction=<N>:指定老年代占用多大比例时,开始并发gc

暂停:

cms在major gc会有两次暂停,mark和remark。minor gc也会有短暂停,minor gc和major gc并发进行,为了避免两次暂停重合成一次长暂停,cms会把remark暂停安排在两次minor gc之间。

增长模式在1.8被废弃

上一篇:rabbitmq集群搭建,镜像队列搭建


下一篇:rabbitmq集群搭建方法简介(测试机linux centos)【转】