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

CMS垃圾回收流程的理解

初始标记:STW,标记处GC roots能直接关联到的对象速度很快
并发标记:垃圾回收线程和工作线程同时工作,遍历整个对象图,标记出可达对象
重新标记:STW,重新标记出并发标记阶段新产生的垃圾对象。(因为并发标记阶段,用户线程在运行,引用可能发生变化)
并发清理:清理垃圾,同时工作线程也会运行

CMS问题:浮动垃圾 + 内存碎片
并发清理阶段,用户线程在运行,新产生的垃圾没法清理,就会成为浮动垃圾,只能等待下一次垃圾回收进行收集
由于cms使用的是标记-清除算法,不会进行碎片整理,所以会产生内存碎片。

当碎片很多的时候,当新的对象过来的时候,可能找不到空间存放了(产生Promotion Failed),这时候会把老奶奶Serial Old请出来回收空间.

怎么解决内存碎片问题:

  • -XX:+UseCMSCompactAtFullCollection
    在FGC时进行压缩 ==> 解决碎片化的参数
  • -XX:CMSFullGCsBeforeCompaction
    多少次FGC之后进行压缩 ==> 解决碎片化的参数

这两个参数可以设置在FGC时进行压缩或者进行多少次FGC之后进行压缩。

调整–XX:CMSInitiatingOccupancyFraction,指得是当老年代的空间利用达到百分比多少的时候,进行CMS回收垃圾,让老年代有足够的空间来进行Promotion和产生浮动垃圾。
调优的时候,可以适当降低这个值,让CMS保持老年代有足够的空间,以免触发Serial Old老奶奶。


http://www.kler.cn/a/386857.html

相关文章:

  • ios swift开发--ios远程推送通知配置
  • Elasticsearch 8.16:适用于生产的混合对话搜索和创新的向量数据量化,其性能优于乘积量化 (PQ)
  • 11张思维导图带你快速学习java
  • 如何用WordPress和Shopify提升SEO表现?
  • 尽量通俗易懂地概述.Net U nity跨语言/跨平台相关知识
  • git commit 校验
  • 在线演示,开箱即用:传知平台让高质量内容与技术完美融合
  • 记一次宝塔centos出现Failed to start crond.service: Unit crond.service not found.解决
  • YOLOv11融合[ECCV2024]自调制特征聚合SMFA模块及相关改进思路|YOLO改进最简教程
  • 使用ookii-dialogs-wpf在WPF选择文件夹时能输入路径
  • 「Mac畅玩鸿蒙与硬件31」UI互动应用篇8 - 自定义评分星级组件
  • Flink on YARN是如何确定TaskManager个数的
  • [spark面试]spark与mapreduce的区别---在DAG方面
  • CI_CD
  • LabVIEW气体检测系统
  • 【Android】组件化开发入门
  • java-web-苍穹外卖-day2-上:测试阶段区分+开发工具区分
  • 在CentOS 7上安装Alist
  • 【elkb】kibana后台删除索引
  • Android OpenGL ES详解——纹理:纹理过滤GL_NEAREST和GL_LINEAR的区别
  • jmeter常用配置元件介绍总结之函数助手
  • Virtual Box 安装 Deepin 系统
  • Ubuntu 修改时区 同步时间
  • lua入门教程:lua函数
  • 【嵌入式开发——Linux操作系统】8进程间通信IPC和内核同步
  • C# 中的 IntPtr