Java对象的内存布局
对象在堆中的存储布局可分为三部分:对象头、实例数据和对齐填充。
对象头
对象头包括两类信息。第一类用于存储对象自身的运行时数据,如哈希码、GC分代年龄、锁状态标志、线程持有的锁、偏向线程ID、偏向时间戳等。
另一类是类型指针,指向对象的类型元数据,JVM通过这个指针判断它是哪个类的实例。如果对象是Java数组,对象头中还要有一块记录数组长度的数据。
实例数据
存储对象的有效信息,即我们在代码里定义的各种类型的字段内容。
对齐填充
起占位符的作用,因为任何对象的大小都必须是8字节的整数倍,对象头已经被设计为8字节的整数倍,如果实例数据部分没对齐就要通过对齐填充来补全。