对象在堆内存中的存储布局可以划分为三个部分:
- 对象头(Header)
HotSpot虚拟机对象的对象头部分包括两类信息。第一类是用于存储对象自身的运行时数据,如哈希码(HashCode)、GC分代年龄、锁状态标志、线程持有的锁、偏向线程ID、偏向时间戳等(Mark Word);另外一部分是类型指针,即对象指向它的类型元数据的指针。(如果是Java数组时,对象头还必须有一块记录数组长度的数据)
- 实例数据(Instance Data)
对象真正存储的有效信息,即我们在程序代码里面所定义的各种类型的字段内容,无论是从父类继承下来的,还是在子类中定义的字段都必须记录起来。
- 对齐填充(Padding)
对齐填充仅仅起着占位符的作用,将对象补齐到8字节的整数倍。