Java对象头

一、对象的内存布局

  HotSpot虚拟机中,对象在内存中存储的布局可以分为三块区域:

  1. 对象头(Header)->3字宽
    • Mark Word :存储对象的hashcode或锁信息(1字宽)
    • Class Metadata Address:类型指针(1字宽):
      即是对象指向它的类元数据的指针,虚拟机通过这个指针来确定这个对象是哪个类的实例。
    • Array Length:数组长度(1字宽):如果当前对象是数组
  2. 实例数据(Instance Data)
    对象真正存储的有效信息

  3. 对齐填充(Padding)
    JVM要求对象的大小必须是8字节的整数倍,对象头已经满足,则当对象的实例数据部分没有对齐时,需要对齐填充来补全。

Synchronized用的锁是存在java对象头里面的。
如果对象是数组结构,则虚拟机用3个字宽存储对象头。
如果对象是非数组结构,则虚拟机用2个字宽存储对象头。
32位虚拟机中,1字宽=4字节=32bit

32位JVM的Mark Word默认存储结构如下:(32bit)
Java对象头_第1张图片
在运行期间,Mark Word里存储的数据会随着锁标志位的变化而变化,可能会变化为以上4种数据。

https://blog.csdn.net/zhoufanyang_china/article/details/54601311

你可能感兴趣的:(Java并发)