当前位置: 首页 > news >正文

JVM CMS 在Full GC时针对跨代引用的优化

个人博客

JVM CMS 在Full GC时针对跨代引用的优化 | iwts’s blog

跨代引用问题

Full GC慢的一个很重要的问题:跨代引用。

简单描述就是:

现代JVM一般是根据对象存活的特性进行了分代,提高了垃圾收集的效率。但是像在回收新生代的时候,有可能有老年代的对象引用了新生代对象,所以老年代也需要作为根,但是如果扫描整个老年代的话效率就又降低了。

这个就是跨代引用的问题。

跨代引用对Full GC的影响

由于跨代引用的扫描问题,导致Full GC时,如果此时新生代的数据量很大,会导致扫描时间显著增加。

CMS 对跨代引用的优化

最简单粗暴的方法:Full GC前强制走一个Minor GC,那么新生代数据降到很低的值,就能解决这个问题。而CMS也是基本采用这个方案。

CMS 并发预清理

CMS在Remark前增加了一个可中断的并发预清理(CMS-concurrent-abortable-preclean),该阶段主要工作仍然是并发标记对象是否存活,只是这个过程可被中断。

此阶段在Eden区使用超过2M(默认阈值,可修改)时启动,如果此阶段执行时等到了Minor GC,那么跨代引用的对象将会跟随Minor GC被清除掉,Reamark阶段需要扫描的对象就少了。

此外,CMS为了避免这个阶段没有等到Minor GC而陷入无限等待,提供了参数CMSMaxAbortablePrecleanTime,默认为5s,如果可中断的预清理执行超过5s,不管发没发生Minor GC,都会终止此阶段,进入Remark。

所以,CMS在Remark前也不一定会执行Minor GC,还是有风险。CMS提供CMSScavengeBeforeRemark参数,设置后可以保证Remark前强制进行一次Minor GC。

http://www.lryc.cn/news/354066.html

相关文章:

  • 【Makefile】Makefile 编译 Keil 工程(Linux 环境)
  • Django的视图层——1HttpResponse对象详解
  • 企业活动想找媒体报道宣传怎样联系媒体?
  • 基于ChatGPT+RPA的融资融券业务担保资产风险评价
  • 2. CSS选择器与伪类
  • tcpdump源码分析
  • 搭建Harbor镜像仓库
  • 【C/C++】Makefile文件的介绍与基本用法
  • PHP生成二维码+二维码包含logo图片展示
  • vue项目打包教程
  • 制作电子画册速成攻略,快来试试
  • 【java程序设计期末复习】chapter7 内部类和异常类
  • Windows下安装配置深度学习环境
  • 如何使用ssh将vscode 连接到服务器上,手把手指导
  • Tomcat调优参数
  • 云计算和大数据处理
  • VAE-变分自编码器(Variational Autoencoder,VAE)
  • Android Room 使用模版
  • Linux/Ubuntu 中安装 ZeroTier,实现内网穿透,2分钟搞定
  • java技术:oauth2协议
  • Java 18 新特性详解
  • 【css3】06-css3新特性之网页布局篇
  • 【开源】大学生竞赛管理系统 JAVA+Vue+SpringBoot+MySQL
  • 跨境选品师不是神话:普通人也能轻松掌握,开启全球贸易新篇章!
  • 前缀和,差分算法理解
  • ubuntu/部分docker容器无法访问https站点
  • 【MySQL】库的基础操作
  • 嵌入式0基础开始学习 ⅠC语言(2)运算符与表达式
  • 汇编语言(一)
  • 2010-2022年各省新质生产力数据(含原始数据+测算代码+计算结果)