对象在堆内存的布局分为三个区域:
- 分别是对象头(Header)、实例数据(Instance Data)、对齐填充(Padding)
- 对象头:对象头包括两部分信息分别是Mark World(_mark)和元数据(_metadata),Mark World用于存储对象运行时的数据,比如HashCode、锁状态标志、GC分代年龄等。而元数据指针用于指向方法区的中目标类的类型信息,通过元数据指针可以确定对象的具体类型。
- 实例数据:用于存储对象中的各种类型的字段信息(包括从父类继承来的)。
- 对齐填充:对齐填充不一定存在,起到了占位符的作用,没有特别的含义。
Mark Word 是这样的:
Mark Word结构为: