在HotSpot虚拟机,对象在内存中布局分为三块区域:
- 对象头(Header)
- 实例数据(Instance Data)
- 对其填充(Padding)
对象头
对象头包括两部分信息:Mark Word && 类型指针
Mark Word:存储对象自身运行时数据,Hash Code、GC分代年龄、线程持有的锁、偏向线程ID、偏向时间戳等。数据长度32bit/64bit(32位/64位虚拟机)
类型指针: 对象指向它的类元数据的指针。如果对象是是一个Java数组,对象头必须记录数组长度。
实例数据
对象的有效信息,代码中定义的各种类型的字段内容
对其填充
对其填充不是必然存在的,仅仅是占位含义。保证对象大小是8字节的整数倍。