GC选择之CMS 并发标记清除

CMS收集器 Concurrent Markup Sweep 并发标记清除

使用了标记-清除算法与标记-压缩相比,并发阶段会降低吞吐量

算法作用在老年代以及永久区(新生代使用ParNew)

-XX:+UseConcMarkSweepGC

CMS运行过程

1.初始标记(用户线程停止)

根可以关联到的对象

速度快

2.并发标记(和用户线程一起)

主要标记过程,标记全部对象

3.重新标记(用户线程停止)

由于并发标记时,用户线程依然进行因此在正式清理前,再做修正。

4.并发清除(和用户线程一起)

基于标记结果,直接清理对象

特点:

1.尽可能降低停顿

2.会影响系统整体吞吐量和性能

比如,在用户线程运行过程中,分一半CPU去做CMS GC,系统性能在GC阶段,反应速度就下降一半。

3.清理不彻底。

在清理阶段,用户线程还在执行,会产生新的垃圾,无法清理。

4.因为和用户线程一起执行,不能在空间将满时再清理。

-XX:CMSInitiatingOccupancyFraction设置触发GC的阈值。 设定老年代空间被使用多少后触发。

如果不幸内存预留空间不足,就会引起concurrent mode failure.

5.在CMS遇到空间不足时,可以使用串行收集器作为后备。

6.做标记清除时,可以不停止应用线程,但会产生内存碎片,而做标记压缩时,会Stop-The-World,但不会产生内存碎片。

-XX:+UseCMSCompactAtFullCollectionFull GC后,进行一次碎片整理。

整理过程是独占的,会引起停顿时间变长。

减轻GC压力 软件如何架构,代码如何写,堆空间如何分配。

1.性能的根本在应用。2.GC参数属于微调。3.GC参数设置不合理,会影响性能,产生大的延时。

【本文转自:韩国服务器 kt.html提供,感谢支持】己欲立先立人,已欲达先达人。

GC选择之CMS 并发标记清除

相关文章:

你感兴趣的文章:

标签云: