标签:管理系统 width 标识 sof 分代 reference 包含 存储空间 定义
1、对象头(Header)
mark word:
对象头信息与对象自身定义的数据无关的额外存储成本,考虑到虚拟机的空间效率,对象头信息被设计成一个非固定的数据结构以便在极小的空间内存储尽量多的信息 ,它对根据对象的状态复用自己的存储空间。
下图描述 32位虚拟机 上,对象不同状态时 mark word 比特位区间的含义:
锁状态 | 25bit | 4bit | 1bit | 2bit | |
23bit | 2bit | 是否偏向 | 锁标志位 | ||
无锁态 | 对象的hashCode | 分代年龄 | 0 | 01 | |
轻量级锁 | 指向栈中锁记录的指针 | 00 | |||
重量级锁 | 指向互斥量(重量级锁)的指针 | 10 | |||
GC标记 | 空 | 11 | |||
偏向锁 | 线程ID | Epoch | 分代年龄 | 1 | 01 |
查找对象元数据的两种方式:
查找元数据两种方式的区别:
2、实例数据(Instance Data)
各种类型的字段内容(父类 + 子类)。
3、对齐填充(Padding)
占位符(没有其他作用),虚拟机内存管理系统要求对象起始位置必须是 8 的整数倍,实例数据部分没有对齐,则填充。
补充:
文中的插图,可以衍生出很多面试题,如:
1、GC 分代年龄为什么默认为 15?
2、对象锁状态类型有几种?
3、为什么要多 1bit 来标记是否偏向?
......
标签:管理系统 width 标识 sof 分代 reference 包含 存储空间 定义
原文地址:https://www.cnblogs.com/miaooooo/p/12179534.html