JVM为什么GC分代年龄最大为15
Posted 王六六的IT日常
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JVM为什么GC分代年龄最大为15相关的知识,希望对你有一定的参考价值。
参考博客:
面试官:为什么GC分代年龄最大为15
六六答:因为对象头中的Mark Word采用4个bit位来保存年龄,4个bit位能表示的最大数就是15!
👇
对象头?????因为GC是将对象进行会回收,来看看对象的结构叭
👇
JAVA对象结构:
我们平时写代码,只是编写对象的实例数据,但其实Java对象除了自身的实例数据外,还包括 对象头 和 对齐字节 ,如下图所示:
对象头包含两类信息:
- 一种是Mark Word :用于存储对象自身的运行时数据,如HashCode,GC的分代年龄,锁状态标志,线程持有的锁,偏向线程ID,偏向时间戳等。这部数据的长度在32位和64位的虚拟机中分别为32比特和64比特。(Mark Word的32个比特存储空间中的25个比特用于存储对象的HashCode,4个比特存储对象分代年龄,2个比特存储锁标志位,一个比特固定为0)
- 另一种是Klass Pointer 类型指针,即对象指向它的类型元数据的指针,Java通过这个指针确定该对象是哪个类的实例。但是并不是所有的虚拟机实现都必须在对象数据上保留类型指针,换句话说,查找对象的元数据信息不一定要经过对象本身。
以上是关于JVM为什么GC分代年龄最大为15的主要内容,如果未能解决你的问题,请参考以下文章