1.cms采用的垃圾回收算法

CMS收集器运行示意图我们前面介绍了CMS收集收集的基本步骤,文章参考:CMS垃圾收集器(一):CMS入门然后又介绍了CMS收集器是如何处理并发标记时对象关系被用户线程改变的问题,文章参考:CMS垃圾收集器(二):CMS如何处理并发标记问题-三色标记

2.cms垃圾收集器采用的回收算法

今天我们介绍下CMS收集的缺点1)CMS收集器对处理器资源非常敏感由上图和之前的文章我们知道CMS追求的是回收停顿时间尽可能短,为了达到这种目的,引入了并发标记和并发清除,即GC线程和用户线程并发执行在并发阶段处理器需要分出一部分资源执行GC线程,这会导致应用程序变慢,总吞吐量降低。

3.cms垃圾回收机制

默认情况下CMS启动的回收线程数是:(处理器核数+3)/4.这里分两种情况:1)处理器个数小于等于4个

4.CMS垃圾收集器

可以看出随着处理器个数越来越小,GC线程占比会越来越大。2)处理器个数大于四个

5.CMS是一种并行垃圾回收器

随着处理器核数的不断增加,GC线程占比会不断下降2)CMS收集器无法处理“浮动垃圾”在昨天的文章中我们介绍三色标记的时候说过一种情况:并发标记时会出现有些已经死亡的对象被标记成存活,从而逃过垃圾回收,这部分应该被回收而没有被回收的对象就是“浮动垃圾”。

6.搭配cms垃圾回收器

同样因为GC线程运行时用户线程也在运行,只要用户线程在运行就会有对象被分配,因此虚拟机需要预留一部分内存供用户线程分配对象使用因此当老年代内存使用达到一个值之后,CMS收集器就会被激活,进行垃圾回收这个值在JDK5中默认是。

7.cms收集器优缺点

68%,在JDK6时默认为92%预留一部分空间又会出现另一种情况:预留内存如果无法满足用户线程分配新对象,就会出现一次“并发失败”(Concurrent Mode Failure),这时候虚拟机会临时启用Serial Old收集器进行垃圾回收,冻结所有与用户线程。

8.cms回收算法详解

Serial Old收集器参考:java面试题-垃圾收集器(1)Serial/Serial Old收集器3)CMS收集器会造成内存碎片GC我们知道CMS收集器使用的是标记清除算法,参考:垃圾回收算法-标记清除法

9.CMS垃圾回收算法

,这个算法会产生垃圾碎片当垃圾碎片很多的时候,分配大对象会没有足够的空间,这时候CMS会触发一次Full GC,Full GC使用的是标记-整理算法,参考:垃圾回收算法-标记整理算法因为要进行对象的移动,因此会暂定用户线程,即Stop The World。

10.cms垃圾回收器详解

虚拟机提供一个参数:-XX: CMSFullGCsBefore-如果设置为0,表示每次进入Full GC时都进行碎片整理。if(对你有帮助) { "点赞" & “关注”}举报/反馈