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

【jvm】分代年龄为什么是15次

目录

          • 1. 说明
          • 2. JVM堆内存结构
          • 3. 对象头中的GC年龄存储
          • 4. 设计考虑

1. 说明
  • 1.JVM分代年龄设置为15次主要是由于对象头中用于存储GC年龄的bit位数限制(4个bit位最大能表示15)。
  • 2.这也是基于JVM内存管理和垃圾收集的设计考虑。
2. JVM堆内存结构
  • 1.在JVM的堆(Heap)内存里面,主要分为三个部分:伊甸园区(Eden Space)、Survivor区(包括From区和To区)、老年代(Old Generation)。
  • 2.伊甸园区:新创建的对象主要在伊甸园区分配内存。
  • 3.Survivor区:当伊甸园区的内存空间不足时,会触发Young GC(新生代垃圾收集)进行对象回收。那些因为存在引用关系而无法回收的对象,会被转移到Survivor区。Survivor区内部又分为From区和To区,刚从伊甸园区转移过来的对象会分配到From区。每经历一次Young GC,这些无法被回收的对象就会在From区和To区来回移动,每移动一次,这个对象的GC年龄就加1。
  • 4.老年代:当对象的GC年龄达到某个阈值时(默认为15),或者满足动态年龄判断的依据时,该对象会被转移到老年代。
3. 对象头中的GC年龄存储
  • 1.在HotSpot虚拟机中,一个Java对象在JVM内存中的布局由三个部分组成:对象头、实例数据、对齐填充。
  • 2.对象头包含了用于存储对象自身的运行时数据,如哈希码(HashCode)、GC分代年龄、锁状态标志等。这些信息被官方称为“Mark Word”。
  • 3.在对象头中,有4个bit位用于存储GC年龄。
  • 4.由于4个bit位能够存储的最大数值是1111(十进制就是15),因此JVM分代年龄的最大值就被限制为了15。
4. 设计考虑
  • 1.从设计角度来看,当一个对象触发了最大值15次Young GC还没有被回收时,这意味着该对象在新生代中存活了较长时间,有可能是一个长期使用的对象。
  • 2.JVM会将其移动到老年代,以便更好地管理内存和进行垃圾收集。
  • 3.JVM还引入了动态对象年龄判断的方式来决定把对象转移到老年代。
  • 4.即使一个对象的GC年龄没有达到15次,但只要满足动态年龄判断的依据(如对象大小、存活时间等),同样会被转移到老年代。

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

相关文章:

  • 15-1.Java 网络编程之 InetAddress(InetAddress 常用静态方法、InetAddress 常用方法)
  • 【项目开发】Web App vs Native App,开发者作何选择?
  • 算法魅力-二分查找实战
  • Prometheus监控SQL SERVER常用指标和PromQL预警
  • .NET 9 中 IFormFile 的详细使用讲解
  • 【Python进阶】Python中的数据库交互:使用SQLite进行本地数据存储
  • C语言之链表操作
  • C语言第九周课——经典算法
  • 从系统崩溃到绝地反击:一次微服务存储危机的救赎
  • 在uniapp当中隐藏掉默认tabbar并且使用自己的tabbar
  • 查看解决端口占用,以及docker解决端口占用的原理
  • char* 指针转换与打印
  • 【MySQL】MySQL中的函数之JSON_REPLACE
  • Jmeter中的监听器(四)
  • 电动机三角型与星型的区别和接线方法图解
  • 新手小白学习docker第七弹------安装redis集群大厂面试
  • 从H3C和Dell官网下载OEM版VMware Esxi镜像攻略
  • 大数据技术之HBase中的HRegion
  • UAV-VisLoc:中国11地大规模无人机视觉定位数据集
  • Vulnhub靶场 Billu_b0x 练习
  • LeetCode77:组合
  • python常见的后缀文件
  • 【高等数学学习记录】函数的求导法则
  • C++初阶——优先队列
  • 分布式微服务项目,同一个controller不同方法间的转发导致cookie丢失,报错null pointer异常
  • 122、java的LambdaQueryWapper的条件拼接实现数据sql中and (column1 =1 or column1 is null)