首先,
CMS
收集器对处理器资源非常敏感。事实上,面向并发设计的程序都对处理器资源比较敏
感。在并发阶段,它虽然不会导致用户线程停顿,但却会因为占用了一部分线程(或者说处理器的计
算能力)而导致应用程序变慢,降低总吞吐量。
CMS
默认启动的回收线程数是(处理器核心数量
+3
)
/4
,也就是说,如果处理器核心数在四个或以上,并发回收时垃圾收集线程只占用不超过
25%
的
处理器运算资源,并且会随着处理器核心数量的增加而下降。但是当处理器核心数量不足四个时,
CMS
对用户程序的影响就可能变得很大。如果应用本来的处理器负载就很高,还要分出一半的运算能
力去执行收集器线程,就可能导致用户程序的执行速度忽然大幅降低。为了缓解这种情况,虚拟机提
供了一种称为
“
增量式并发收集器
”
(
Incremental Concurrent Mark Sweep/i-CMS
)的
CMS
收集器变种,
所做的事情和以前单核处理器年代
PC
机操作系统靠抢占式多任务来模拟多核并行多任务的思想一样,
是在并发标记、清理的时候让收集器线程、用户线程交替运行,尽量减少垃圾收集线程的独占资源的