Java对象头
Java对象保存在内存中时,由以下三部分组成:1对象头2实例数据3对齐填充字节
java对象头
由以下内容组成
长度 | 内容 | 说明 |
---|---|---|
32/64bit | mark word | 存储hash code或锁信息 |
32/64bit | Class Metadata Address | 对象类型数据的指针 |
32/64bit | Array length | 数组的长度(当前对象为数组) |
在运行期间,Mark Word中存储的数据会随着锁标志位的变化而变化。
锁状态 | 25bit | 4bit | 1bit | 2bit | |
23bit | 2bit | 是否是偏向锁 | 锁标志位 | ||
轻量级锁 | 指向栈中锁记录的指针 | 00 | |||
重量级锁 | 指向互斥量(重量级锁)的指针 | 10 | |||
GC标记 | 空 | 11 | |||
偏向锁 | 线程ID | Epoch | 对象分代年龄 | 1 | 01 |