在HotSpot虚拟机中, 对象在内存中存储的布局可以分为3块区域: 对象头( Header) 、实例数据( Instance Data) 和对齐填充( Padding) 。
1. 对象头( Header)
HotSpot虚拟机的对象头包括两部分信息。
第一部分用于叫“Mark Word”,存储对象自身的运行时数据,如哈希码( HashCode) 、 GC分代年龄、 锁状态标志、 线程持有的锁、 偏向线程ID、 偏向时间戳等
java对象头里的 Mark Word 里默认存储对象的 HashCode, 分代年龄,锁标记位。
第二部分是类元信息(类型指针), 即对象指向它的类元数据的指针, 虚拟机通过这个指
针来确定这个对象是哪个类的实例。
2. 实例数据( Instance Data)
对象真正存储的有效信息, 也是在程序代码中所定义的各种类型的字段内容。
3. 对齐填充( Padding)
占位符。虚拟机要求对象起始地址必须是8字节的整数倍。填充数据不是必须存在的,仅仅是为了字节对齐。这部分内存按8字节补充对齐。