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参数来进行指针压缩。

数组长度,当对象为数组类型时存储数组长度。

posted @ 2023-05-25 09:56  DreamCatt  阅读(932)  评论(0)    收藏  举报