Java对象头Mark Word
32位虚拟机MarkWord分布

64位虚拟机MarkWord分布

MarkWord是java对象头的一部分,还包括Klass Word和数组长度。
MarkWord主要包含对象hashcode、偏向线程ID(ThreadID)、偏向锁状态(0,1 1为是偏向锁)、锁标志位(01,00,10,11 无锁状态和偏向锁状态都为01,这时依靠偏向锁状态来区分,00位轻量级锁状态,10位重量级锁状态,11为GC状态)、和偏向时间戳。可以看到64位虚拟机其实是浪费了一部分空间的,JVM支持通过-XX:+UseCompressedOops 参数来进行指针压缩。
Klass Pointer(元数据指针)主要保存了指向元空间(方法区)类信息的指针,HotSpot虚拟机引用类型变量指针直接指向堆中对象地址,但是此时不知道对象的类型,需要对象头中的这部分数据来寻找元空间的类型信息。可以通过通过-XX:+UserCompressedClassPointers参数来进行指针压缩。
数组长度,当对象为数组类型时存储数组长度。

浙公网安备 33010602011771号