-
对象头
-
Mark word 标记字段
-
用于存储对象自身的运行时数据,如哈希码(HashCode)、GC分代年龄、锁状态标志、线程持有的锁、偏向线程ID、偏向时间戳等
-
-
ClassPoint 类型指针
-
对象指向它的类型元数据的指针,Java虚拟机通过这个指针 来确定该对象是哪个类的实例
-
-
数组长度
-
如果对 象是一个Java数组,那在对象头中还必须有一块用于记录数组长度的数据,因为虚拟机可以通过普通 Java对象的元数据信息确定Java对象的大小,但是如果数组的长度是不确定的,将无法通过元数据中的 信息推断出数组的大小。
-
-
-
实例数据
对象真正存储的有效信息
-
对齐填充
不是必然存在的,也没有特别的含义,它仅仅起着占位符的作 用。
由于HotSpot虚拟机的自动内存管理系统要求对象起始地址必须是8字节的整数倍,换句话说就是 任何对象的大小都必须是8字节的整数倍。对象头部分已经被精心设计成正好是8字节的倍数(1倍或者 2倍)。因此,如果对象实例数据部分没有对齐的话,就需要通过对齐填充来补全。