JVM-CMS垃圾回收器

CMS垃圾回收器,它是基于标记清理的一种垃圾回收算法的垃圾回收器,然后他主要用在老年代,他的清除步骤是:

第一是初始标记,会产生短暂的stopp the word,用于标记GC Root能够直接到达的对象,1. 标记老年代中所有的GC Root对象, 2. 标记年轻代中活着的对象引用到的老年代的对象

第二是并发标记,此时,垃圾回收进程和线程和用户线程是并发执行的,主要是执行GCr Root tracking的过程,找到所有存活的对象,并进行标记

第三个步骤是重新标记,会产生短暂的stopp the word。因为在并发标记的过程中,用户线程和垃圾回收线程进行并发执行,会使一些之前标记的对象产生误差,所以要进行重新标记,

最后是并发清理的过程,对未被标记的对象进行清除回收。

需要注意的三个点:

第一个点是-XX:CMSlnitiatingOccupanyFraction    不要等到对内存满之后再进行垃圾回收,因为比如说CMS垃圾回收器,在第四个阶段并发清理的过程中啊,是垃圾回收线程和用户线程是并发执行的,在此过程中会产生额外的一些浮动垃圾,这些垃圾的话,是没有地方存放的,所以说要在堆内存占用到百分之八十的时候,就进行垃圾回收。

第二个点是    -XX:CMSScavengeBeforeRemark    CMS垃圾回收器的第三个阶段重新标记阶段,因为新生代的一些对象会引用老年代的一些对象,所以要重新扫描整个堆,这样的话对性能并不是特别友好,所以在再重新标记之前,应该先对新生代的一些没有用的对象进行清理,然后再进行重新标记。

第三CMS垃圾回收器的一些缺点,他主要是基于标记清除的垃圾回收算法,缺点是会产生大量的内存碎片,这可能会导致堆内存再次不足啊,一些大的对象没有放,没有办法放入堆内存,所以CMS垃圾回收器会降级为serialOld的垃圾回收器,进行单线程的垃圾回收处理,会很大程度上影响响应时间,而且会造成很长时间的stopp the word

 

 

 

以下是参考博客

 

https://www.cnblogs.com/chenpt/p/9803298.html

https://blog.csdn.net/zqz_zqz/article/details/70568819

posted @ 2021-12-30 16:05  11111ghm  阅读(107)  评论(0编辑  收藏  举报