为什么CMS里的分代年龄是6而不是15

CMS (Concurrent Mark Sweep) 是一种基于分代的垃圾收集器,其中分代年龄指的是一个对象在年轻代中经历了多少次垃圾收集。在 CMS 中,当一个对象的分代年龄达到阈值时,就会被晋升到老年代中。

在 CMS 中,分代年龄的阈值默认为 6,而不是 15。这是因为 CMS 的设计目标是尽可能减少停顿时间,而将分代年龄设置为 6 可以使 CMS 更快地收集年轻代。具体原因如下:

  1. 分代年龄越小,晋升到老年代的对象越少,因此老年代中的对象数量相对较少,GC 耗时也就会相对较短。
  2. 当分代年龄为 6 时,CMS 将只在年轻代和老年代之间进行一次切换,而将分代年龄设置为 15 则需要进行两次切换。这可以减少年轻代和老年代之间的频繁切换,提高 CMS 的并发性能和效率。

需要注意的是,分代年龄的具体值可以根据实际情况进行调整,例如可以根据应用程序的内存使用情况和垃圾收集器的性能来调整分代年龄的阈值,以达到最优的垃圾收集效果。

为什么当分代年龄为 6 时,CMS 将只在年轻代和老年代之间进行一次切换,而将分代年龄设置为 15 则需要进行两次切换?

当 CMS 在进行垃圾收集时,需要同时扫描年轻代和老年代中的对象,因此需要进行年轻代和老年代之间的切换。每次切换需要耗费一定的时间,因此切换次数越多,垃圾收集器的效率就越低。

在 CMS 中,分代年龄指的是对象在年轻代中经历了多少次垃圾收集,当分代年龄达到一定阈值时,对象将会被晋升到老年代中。当分代年龄的阈值为 6 时,CMS 只需要在年轻代和老年代之间进行一次切换,因为大部分对象的分代年龄都不会超过 6,所以绝大部分对象都在年轻代中进行垃圾收集,只有少部分对象需要在老年代中进行收集。

而当分代年龄的阈值为 15 时,需要进行两次切换。因为此时有更多的对象已经晋升到老年代中,需要在老年代中进行垃圾收集,因此需要先扫描老年代中的对象,然后再切换到年轻代中扫描对象。这就导致了切换次数的增加,降低了垃圾收集器的效率。

因此,将分代年龄设置为较小的值,可以减少切换次数,提高 CMS 的垃圾收集效率。但需要根据具体应用场景进行调整,以达到最优的垃圾收集效果。

垃圾回收中的分代年龄相关推荐

  1. 【Android 内存优化】内存抖动 ( 垃圾回收算法总结 | 分代收集算法补充 | 内存抖动排查 | 内存抖动操作 | 集合选择 )

    文章目录 一. 垃圾回收算法总结 二. 分代收集算法补充 三. 查看 Java 虚拟机 四. 获取 Android 应用可使用最大内存 五. 内存抖动标志 六. 排查内存抖动 七. 常见的造成内存抖动 ...

  2. 【JVM】垃圾回收算法与分代回收

    文章目录 1. 垃圾回收算法概述 2. 标记-清除算法 3. 标记-复制算法 4. 标记-整理算法 5. 分代回收 本文参考:深入理解Java虚拟机:JVM高级特性与最佳实践(第3版) 1. 垃圾回收 ...

  3. JVM垃圾回收中新生代老生代的问题

    今天看了下Jvm中新生代和老年代的定义和解析,然后看到一篇博,把自己整懵了,还好后面应该是懂了. 首先是我看到的关于新生代和老年代相关的部分 转自https://www.cnblogs.com/gao ...

  4. 简介三种垃圾回收机制:分代复制垃圾回收,标记垃圾回收,增量垃圾回收

    一.分代复制垃圾回收 不同的对象的生命周期是不一样的.因此,不同生命周期的对象可以采取不同的收集方式,以便提高回收效率. 在Java程序运行的过程中,会产生大量的对象,其中有些对象是与业务信息相关,比 ...

  5. 53.垃圾回收算法的实现原理、启动Java垃圾回收、Java垃圾回收过程、垃圾回收中实例的终结、对象什么时候符合垃圾回收的条件、GC Scope 示例程序、GC OutOfMemoryError的示例

    53.垃圾回收算法的实现原理 53.1.目录 53.2.启动Java垃圾回收 53.3.Java垃圾回收过程 53.4.垃圾回收中实例的终结 53.5.对象什么时候符合垃圾回收的条件? 53.5.1. ...

  6. 并发系列三:证明分代年龄、无锁、偏向锁、轻量锁、重(chong)偏向、重(chong)轻量、重量锁

    前言 上篇文章咱们了解了synchronized关键字的常见用法.对象头以及证明了一个对象在无锁状态下的对象头markwork部分的前56位存储的是hashcode.接下来,咱们继续来根据对象头分别证 ...

  7. 为什么分代年龄最大为15

    在hotspot虚拟机中,对象在堆内存中的存储布局可以划分为三部分:对象头,实例数据,对齐填充. HotSpot虚拟机对象的对象头部包含两类信息 用于存储对象自身的运行时数据,如HashCode,GC ...

  8. 垃圾回收中的安全点与安全区域

    文章目录 1. 垃圾回收中的安全点 2. 垃圾回收中的安全区域 1. 垃圾回收中的安全点 安全点:程序执行过程中需要进行垃圾回收时,只有在特定的位置停顿下来开始进行GC,这些特定位置称之为安全点(Sa ...

  9. Java程序员的日常—— 垃圾回收中引用类型的作用

    在Java里面,是不需要太过于关乎垃圾回收,但是这并不意味着开发者可以不了解垃圾回收的机制,况且在java中内存泄露也是家常便饭的事情.因此了解垃圾回收的相关知识就显得很重要了. 引用,在垃圾回收中是 ...

最新文章

  1. android 教程 最新版,Android最新版本开发环境搭建图文教程
  2. 开通博客的第一篇随笔~
  3. 乔布斯在斯坦福大学毕业典礼上的演讲
  4. Java enum枚举类型
  5. openURL的使用(iOS调用系统电话、浏览器、地图、邮件等)
  6. JS 字符串变量全局替换
  7. 已有的MGR集群上配置InnoDB Cluster
  8. mitmproxy的介绍以及配置过程中的问题
  9. ubuntu 安装音乐播放器
  10. 一元线性回归模型系数、方差估计、检验回归效果显著性,b的置信区间,Y约为X的指数函数时,求Y关于x的回归方程
  11. html网页页面显示不正常原因,网页不能正常显示css是什么原因?
  12. 转阿彪 PHP常见的安全问题
  13. 「技术架构」技术风险管理权威指南
  14. python爬取公众号文章如何获取发布时间
  15. 树莓派CM4开机准备开发环境
  16. JAVA模拟win7记事本
  17. 最新PESCMS Ticket客服工单系统源码+全新的设计理念
  18. colormap保存 matlab_matlab的colormap的保存
  19. 测试服务器运行温度,负载、功耗、温度测试结果
  20. Iris植物分类数据可视化(散点图)(python-nvd3)

热门文章

  1. Chapter4:菜单File-Settings之Notifications和KeyMap
  2. java中bo和vo区别_Java中PO、BO、DTO、VO、DAO等概念的认知和区分
  3. 文件IO中read()函数读取输出字符串有乱码
  4. Raptor-回文字符串判断
  5. 解决IE8的Sysfader错误问题
  6. Octave的一些基本操作和语法,快速上手Octave,用实例解释
  7. 用java计算学生绩点并排序_JS代码计算GPA平均学分绩点(适合新版正方教务系统)...
  8. geo ftp环境变量 export source ~/.bashrc Linux中filezilla下载ftp文件 ftp.ncbi.nlm.nih.gov linux下载 ftp下载geo非原始数
  9. AxMath-设置字体-伪装成Word公式
  10. LabVIEW通过网络传输数据