CMS垃圾回收
2022-02-28 20:50:53 0 举报
CMS垃圾回收
作者其他创作
大纲/内容
重新标记
默认开启线程数=(cpu数+3)/4
并发标记
其中初始标记、重新标记这两个步骤仍然需要“Stop The World”。初始标记仅仅只是标记一下GCRoots能直接关联到的对象,速度很快;并发标记阶段就是从GC Roots的直接关联对象开始遍历整个对象图的过程,这个过程耗时较长但是不需要停顿用户线程,可以与垃圾收集线程一起并发运行;重新标记阶段则是为了修正并发标记期间,因用户程序继续运作而导致标记产生变动的那一部分对象的标记记录,这个阶段的停顿时间通常会比初始标记阶段稍长一些,但也远比并发标记阶段的时间短;最后是并发清除阶段,清理删除掉标记阶段判断的已经死亡的对象,由于不需要移动存活对象,所以这个阶段也是可以与用户线程同时并发的。由于在整个过程中耗时最长的并发标记和并发清除阶段中,垃圾收集器线程都可以与用户线程一起工作,所以从总体上来说,CMS收集器的内存回收过程是与用户线程一起并发执行的。
因为跟工作线程并发执行,会存在浮动垃圾--->-XX:CMSInitiatingOccupancyFaction 默认92%如果此时新进入老年代对象大于可用内存空间
-XX:+UseCMSCompactAtFullCollection 开启CMS的压缩-XX:CMSFullGCsBeforeCompaction=0 默认为0,指经过多少次CMS FullGC才进行压缩
跟工作线程并发执行,对老年代所有对象进行GC roots 追踪 耗时长
并发清理
跟工作线程并发执行,对标记出的垃圾进行清除 耗时长
初始标记
0 条评论
回复 删除
下一页