对象的内存布局
对象在内存中可以分为三块区域。对象头+实例数据+对齐填充
对象头
对象头包括两部分:
① mark word:存储对象自身的运行时数据。包括:哈希吗,分代信息,锁的标志位,线程持有的锁,偏向线程id,偏向时间戳。这些信息在32位机器和64位机器上分别占用32bit和64bit。实际上上述信息占用的大小会大于32bit 或者64bit。实际上,mark word是非固定的数据结构,会根据自身的状态复用存储空间(如果未处于锁定的状态,那么25bit用于存储哈希码,4bit存储分代年龄,2用于存锁标志位,1bit固定为0)。
② 类型指针:即指向元数据的指针。(数组的信息直接在对象头中,无需通过元数据信息查找)
实例数据
对象真正存储的有效信息(程序中定义的各种类型的字段内容)。
对齐填充
对象的大小必须为8字节的整数倍。因此此部分只是起到一个填充作用。不是必须的。