1.Java 对象结构![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/22279ffc0a215efc11059fc3abaf0866.png)
1.1 对象头
对象头包括三个字段,第一个字段叫作Mark Word
(标记字),用于存储自身运行时的数据,例如GC标志位、哈希码、锁状态等信息。
第二个字段叫作Class Pointer
(类对象指针),用于存放方法区Class对象的地址,虚拟机通过这个指针来确定这个对象是哪个类的实例。
第三个字段叫作Array Length
(数组长度)。如果对象是一个Java数组,那么此字段必须有,用于记录数组长度的数据;如果对象不是一个Java数组,那么此字段不存在,所以这是一个可选字段。
1.2 对象体
对象体包含对象的实例变量(成员变量),用于成员属性值,包括父类的成员属性值。这部分内存按4字节对齐
1.3 对齐(填充)字节
64位HotSpot VM
每次读取数据的最小单位是8字节,因此对象大小必须保持8字节的整数倍,不足则填充。对象头本身是8的倍数,当对象的实例变量数据不是8的倍数时,便需要填充数据来保证8字节的对齐。