java对象的内存布局_Data

在HotSpot虚拟机中, 对象在内存中存储的布局可以分为3块区域: 对象头( Header) 、实例数据( Instance Data) 和对齐填充( Padding) 。

java对象的内存布局_Word_02

1. 对象头( Header)

java对象的内存布局_数据_03

HotSpot虚拟机的对象头包括两部分信息。

第一部分用于叫“Mark Word”,存储对象自身的运行时数据,如哈希码( HashCode) 、 GC分代年龄、 锁状态标志、 线程持有的锁、 偏向线程ID、 偏向时间戳等

java对象头里的 Mark Word 里默认存储对象的 HashCode, 分代年龄,锁标记位。

java对象的内存布局_java_04

第二部分是类元信息(类型指针), 即对象指向它的类元数据的指针, 虚拟机通过这个指
针来确定这个对象是哪个类的实例。
 

2. 实例数据( Instance Data)

对象真正存储的有效信息, 也是在程序代码中所定义的各种类型的字段内容。

3. 对齐填充( Padding)

占位符。虚拟机要求对象起始地址必须是8字节的整数倍。填充数据不是必须存在的,仅仅是为了字节对齐。这部分内存按8字节补充对齐。