Java
对象(
Object
实例)结构包括三部分:对象头、对象体和对齐
字节,具体如图
所示
1.对象头
对象头包括三个字段,第一个字段叫作
Mark Word
(标记字),用
于存储自身运行时的数据,例如
GC
标志位、哈希码、锁状态等信息。
第二个字段叫作
Class Pointer
(类对象指针),用于存放方法区
Class
对象的地址,虚拟机通过这个指针来确定这个对象是哪个类的实
例。
第三个字段叫作
Array Length
(数组长度)。如果对象是一个
Java
数
组,那么此字段必须有,用于记录数组长度的数据;如果对象不是一个
Java
数组,那么此字段不存在,所以这是一个可选字段。
2.对象体
对象体包含对象的实例变量(成员变量),用于成员属性值,包括
父类的成员属性值。这部分内存按
4
字节对齐。
3.对齐字节
对齐字节也叫作填充对齐,其作用是用来保证
Java
对象所占内存字
节数为
8
的倍数
HotSpot VM
的内存管理要求对象起始地址必须是
8
字节的
整数倍。对象头本身是
8
的倍数,当对象的实例变量数据不是
8
的倍数
时,便需要填充数据来保证
8
字节的对齐