1、前文回顾

CMS采用了4个阶段来垃圾回收:初始标记(STW)、并发标记、重新标记(STW)、并发清理

2、并发回收垃圾导致CPU资源紧张

并发标记和并发清理两个最耗时的阶段,垃圾回收线程和系统工作线程同时工作,会导致有限的CPU资源被垃圾回收线程占用了一部分。

并发标记:对GC Roots进行深度追踪,但老年代的存活对象比较多,导致会追踪大量对象,耗时较高

并发清理:垃圾对象从各种随机的内存位置清理掉,也是比较耗时的

CMS默认启动的垃圾回收线程的数量是(CPU核数 + 3)/ 4

    3、Concurrent Mode Failure问题

CMS只不过是回收之前标记好的垃圾对象,但在清理的过程中存在新加入老年代的垃圾对象(大对象或晋升过来的对象),这种垃圾对象是‘浮动垃圾’,需要下次FullGC来清理。

-XX:CMSInitiatingOccupancyFaction 参数可以用来设置老年代占用多少比例的时候触发CMS垃圾回收

CMS垃圾回收期间,系统程序要放入老年代的对象大于了可用内存空间,此时会如何?会发生Concurrent Mode Failure,此时就会自动用“Serial Old”垃圾回收器替代CMS,强行把系统程序STW,重新进行长时间的GC Roots追踪,然后一次性把垃圾对象都回收掉,完事儿了再恢复系统线程

4、内存碎片问题

CMS采用“标记-清理算法,会产生内存碎片问题。内存碎片会导致更加频繁的FullGC,CMS垃圾收集器 -XX:+UseCMSCompactAtFullCollection 参数默认是打开的,意思是:FullGC后,STW 然后进行碎片整理。

-XX:CMSFullGCsBeforeCompaction,意思是执行多少次Full GC之后再执行一次内存碎片整理的工作。默认值是0 (每次FullGC都进行内存整理)

本文是《从 0 开始带你成为JVM实战高手》内容总结,版权问题,特此声明,更详细内容:

024、JVM实战总结:动手实验:线上部署系统时,如何设置垃圾回收相关参数?相关推荐

  1. 第四范式推出业界首个基于持久内存、支持毫秒级恢复的万亿维线上预估系统...

    线上预估服务是AI在企业应用落地的关键环节,企业通常会采用分布式计算架构在内存中完成实时数据处理和高达万亿维的模型特征存储,并通过多集群副本解决传统纯内存(DRAM)天生的易"失" ...

  2. 程序员搞事!动手实战优化自己公司线上系统JVM,结果。。。

    Java性能调优都是老生常谈的问题,特别当"糙快猛"的开发模式大行其道时,随着系统访问量的增加.代码的臃肿,各种性能问题便会层出不穷. 比如,下面这些典型的性能问题,你肯定或多或少 ...

  3. JVM第六讲:线上环境 FGC 频繁,如何解决?

    本文是JVM第六讲:线上环境 FGC 频繁,如何解决?重点:得靠经验来解决 文章目录 1.问题背景 2.遇到的问题及解决方案 2.1.pinpoint 打点存在大批量300ms以上 2.2.应用 cp ...

  4. java毕业设计“西单”甜品线上预定系统mybatis+源码+调试部署+系统+数据库+lw

    java毕业设计"西单"甜品线上预定系统mybatis+源码+调试部署+系统+数据库+lw java毕业设计"西单"甜品线上预定系统mybatis+源码+调试部 ...

  5. ssm圆梦小学的英语线上考试系统毕业设计源码141505

    SSM圆梦小学的英语线上考试系统 摘 要 信息化社会内需要与之针对性的信息获取途径,但是途径的扩展基本上为人们所努力的方向,由于站在的角度存在偏差,人们经常能够获得不同类型信息,这也是技术最为难以攻克 ...

  6. (附源码)ssm圆梦小学的英语线上考试系统 毕业设计 141505

    SSM圆梦小学的英语线上考试系统 摘 要 信息化社会内需要与之针对性的信息获取途径,但是途径的扩展基本上为人们所努力的方向,由于站在的角度存在偏差,人们经常能够获得不同类型信息,这也是技术最为难以攻克 ...

  7. java-php-python-基于springboot+vue的线上学习系统计算机毕业设计

    java-php-python-基于springboot+vue的线上学习系统计算机毕业设计 java-php-python-基于springboot+vue的线上学习系统计算机毕业设计 本源码技术栈 ...

  8. (附源码)ssm圆梦小学的英语线上考试系统 毕业设计141505

    SSM圆梦小学的英语线上考试系统 摘 要 信息化社会内需要与之针对性的信息获取途径,但是途径的扩展基本上为人们所努力的方向,由于站在的角度存在偏差,人们经常能够获得不同类型信息,这也是技术最为难以攻克 ...

  9. 实验室安全教育线上考试系统V3.0

    瑞熙贝通实验室安全练习和在线考试系统,采取线上培训学习与安全考试相结合的教学形式,在学生进入开放实验室之前通过系统对实验的安全与规范有一个系统的认识与学习.通过线上考试系统,为评价学生的实验室安全学习 ...

最新文章

  1. pythonnamedtuple定义类型_详解Python中namedtuple的使用
  2. 使用VS Code进行远程连接
  3. 通电就可以工作,这些单片机真香!
  4. php查询sql语句错误,Thinkphp3.2.3在SQL执行错误时查看SQL语句
  5. Linux抓包(wireshark+tcpdump)
  6. Django 3.0实战: 仿链家二手房信息查询网(附GitHub源码)
  7. iOS-纯代码编写本地音乐播放器AVAudioPlayer
  8. MATLAB机器人可视化运动仿真
  9. js禁止输入框输入特殊符号或emoji表情
  10. java泛型笔记2--上界通配符
  11. 跳转第三方App或网页进行导航
  12. 在到达胜利之前无法回头
  13. 数组的下标访问和指针访问方式效率分析比较
  14. android地图画线,绘制折线-在地图上绘制-开发指南-Android 轻量版地图SDK | 高德地图API...
  15. 什么是根域名服务器?
  16. ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to
  17. 关于tarjan的浅解
  18. c语言doc是什么文件类型,c语言文件后缀意思.doc
  19. 一个关于通过git将本地项目文件上传Gitee的悲伤故事
  20. 怎么样理解同步清零和异步清零?

热门文章

  1. linux7清空都有a的文件,linux用户和组管理
  2. 超级大水题(还是自己过不了的水题)
  3. php页面引用公共文件,WeiPHP插件模板中快速引入公共模板文件
  4. dbcp 连接都会被断开_科普帖:软件与数据库连接的机制是怎样的?
  5. 计算机大一笔试题,大学计算机基础(大一) 笔试题库
  6. MySQL数据库表分区功能详解
  7. ORACLE 索引失效的原因与解决
  8. js中获取当前时间(yyyy-MM-dd hh-mm-ss)
  9. Kotlin入门(30)多线程交互
  10. mysql 11.2.16_Navicat for MySQL 11.2