在HotSpot虚拟机里,对象在堆内存中的存储布局可以划分为三个部分:对象头(Header)、实例数据(Instance Data)和对齐填充(Padding)。

对象的内存布局_Word

对象头

对象头主要由两部分组成:

第一部分:

存储对象自身的运行时数据:哈希码、GC分代年龄、锁标志状态、线程持有的锁、偏向线程ID、偏向时间戳等,官方称它为Mark Word,它是个动态的结构,随着对象状态变化。

第二部分:

第二部分是类型指针,指向对象的类元数据(即对象代表哪个类)。

此外,如果对象是一个Java数组,那还应该有一块用于记录数组长度的数据。

实例数据

实例数据用来存储对象真正的有效信息,也就是我们在程序代码里所定义的各种类型的字段内容,无论是从父类继承的,还是自己定义的。

对齐填充不是必须的,没有特别含义,仅仅起着占位符的作用。