服务器之家

服务器之家 > 正文

简单分析java中CMS回收器

时间:2021-06-03 11:10     来源/作者:Java教程网

cms(concurrent mark sweep)回收器

它使用的是标记清除算法,同时又是一个使用多线程并行回收的垃圾回收器。

cms主要工作步骤

cms工作时主要步骤有初始标记、并发标记、预清理、重新标记、并发清除和并发重置。其中初始标记和重新标记是独占系统资源的,而预清理、并发标记、并发清除和并发重置是可以和用户线程一起执行的。因此它可以在应用程序运行过程中进行垃圾回收。

简单分析java中CMS回收器

根据标记清除算法,初始标记、并发标记和重新标记都是为了标记出需要回收的对象。并发清理则是在标记完成后,正是回收垃圾对象。并发重置是指在垃圾回收完成后,重新初始化cms数据结构和数据,为下一次垃圾回收做好准备。

在整个cms回收过程中,默认情况下,在并发标记之后,会有一个预清理的操作(也可以设置参数-xx:cmsprecleaningenabled,不进行预清理)。预清理是并发的,除了为正式清理做准备和检查以外,预清理还会尝试控制一次停顿时间。由于重新标记是独占cpu的,如果新生代gc发生后立即触发一次重新标记,那么一次停顿时间可能很长。为了避免这种情况,预清理时,会可以等待一次新生代gc的发生,然后根据历史性能数据预测一下新生代gc可能发生的时间,然后在当前时间和预测时间的中间时刻,进行重新标记。这样,最大程度上避免新生代gc和重新标记重合,尽可能减少一次停顿时间。

cms主要参数设置

-xx:+useconcmarksweepgc启用cms回收器

-xx:concgcthreads 设置并发线程数量

-xx:cmsinitiatingoccupancyfraction 设置当老年代使用率达到n时,执行一次cms回收。

-xx:+usecmscompactatfullcollection cms在垃圾收集完成后,进行一次碎片整理。

-xx:cmsfullgcsbeforecompaction 设置当进行n次cms回收后进行一次内存压缩。

-xx:+cmsclassunloadingenabled 使用cms机制回收perm区class数据

标签:

相关文章

热门资讯

2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全 2019-12-26
yue是什么意思 网络流行语yue了是什么梗
yue是什么意思 网络流行语yue了是什么梗 2020-10-11
背刺什么意思 网络词语背刺是什么梗
背刺什么意思 网络词语背刺是什么梗 2020-05-22
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总 2020-11-13
2021德云社封箱演出完整版 2021年德云社封箱演出在线看
2021德云社封箱演出完整版 2021年德云社封箱演出在线看 2021-03-15
返回顶部