内存布局
-
对象头(Herder)
-
-
1 运行时数据区(Mark Word)
- 哈希值(HashCode)
GC分代年龄
锁状态标志
线程持有的锁
偏向线程ID
偏向时间戳
- 哈希值(HashCode)
-
-
2 指针类型
- 指向类元数据(InstanceKlass)确定该对象所属类型
-
-
3 如果是数组
- 还需记录数组的长度
实例数据(Instance Data)
- 说明: 它是真正存储的有效信息,包括程序代码中定义的各种类型的字段(包括从父类继承下来的和本身拥有的字段)
- 规则:相同宽度的字段总是被分配到一起;父类中的变量总会出现在子类之前;如果CompactFields参数为true,子类的窄变量可能插入到父类变量的空隙。 对齐填充(Padding)
- 对齐填充不是必然存在的,也没有特殊的含义,它仅仅起着占位符的作用。由于HotSpot虚拟机的自动内存管理系统要求对象起始地址必须是8字节的整数倍,所以对象头被设计成正好是8的倍数(1或者2倍)因此,如果对象实例数据部分没有对齐的话,就需要对齐填充来补全。