对象的内存布局

对象在内存中的布局分为3块区域:对象头、实例数据、对齐填充。

1.对象头

包括标志字段(Mark Word)和类型指针(Klass Pointer)两部分信息。

状态 标志位 存储内容
未锁定 01 对象哈希码、分代年龄
轻量级锁定 00 指向锁记录的指针
重量级锁定 10 指向重量级锁的指针
GC标记 11
可偏向 01 偏向线程ID、偏向时间戳、分代年龄

2.实例数据

存储在对象中定义的各种类型的字段内容。存储顺序受到Java虚拟机分配策略和字段在类中定义顺序的影响。

3.对齐补充

不是必然存在的,仅仅起着占位符的作用。如果实例数据不是8字节的整数倍,需要通过对其填充来补全(对象头部分一定是8字节的整数倍)。