一、对象在堆内存中的布局
1.定义
在HotSpot虚拟机中,对象在堆内存的存储布局可以划分为三个部分:对象头(Header)、实例数据(Instance Data)、和对齐填充(Paddin)。
二、对象在堆内存中的存储布局
- 对象头(在64位系统中,Mark Word占了8个字节,类型指针占了8个字节,一共是16个字节)
-
- 对象标记(Mark Word)
-
-
- 默认存储对象的HashCode、分代年龄和锁标志等信息。
- 这些信息都是对象自身定义无关的数据,所以Mark Word被设计成一个非固定的数据结构以便在极小的空间内存春初尽量多的数据。
- 它会根据对象的状态复用自己的存储空间,也就是说在允许期间Mark Word里存储的数据会随着锁标志位的变化而变化。
-
-
- 类元信息(类型指针)
-
-
- 对象指向他的类元数据的指针,虚拟机通过这个指针来确定这个对象是哪个类的实例。
-
- 实例数据
-
- 存放类的属性(Field)数据信息,包括父类的属性信息。
- 对齐填充(保证8个字节的倍数)
-
- 虚拟机要求对象起始地址必须是8字节的整数倍,填充数据不是必须存在的,仅仅是为了字节对齐,这部分内存按8字节补充对齐。