当前位置 : 主页 > 编程语言 > java >

GC选择之CMS 并发标记清除

来源:互联网 收集:自由互联 发布时间:2023-02-04
CMS收集器 Concurrent Markup Sweep 并发标记清除 使用了标记-清除算法与标记-压缩相比,并发阶段会降低吞吐量 算法作用在老年代以及永久区(新生代使用ParNew) -XX:+UseConcMarkSweepGC CMS运行过

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

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

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

 -XX:+UseConcMarkSweepGC

CMS运行过程

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

  根可以关联到的对象

  速度快

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

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

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

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

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

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

 

GC选择之CMS 并发标记清除_用户线程

特点:

1.尽可能降低停顿

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

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

3.清理不彻底。

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

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

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

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

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

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

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

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

 

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

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

上一篇:MySQL show 语句
下一篇:没有了
网友评论