对象内存布局:
{
对象头,
实例数据
对齐填充
}
对象头里面包括
{
- 运行时元数据 -> {
- 哈希值 hashCode
- GC 分代年龄
- 锁 状态标志
- 线程持有的锁
- 偏向线程ID
- 偏向时间戳
}
- 类型指针 -》 指向类元数据局 InstanceKlass,确定该对象所属的类型。
}
实例数据 (Instance Data){
说明: 它是对象真正储的有效信息,包括程序代码中定义各种类型的字段(包括从父类继承而来和本身自带的字段)
规矩:
- 相同宽度的字段总是别 分配在一起
- 父类中定义的变量会出现在子类之前
- 如果compactFields参数默认为true,子类的宽窄变量可能插入到父类变量的空隙
}
对象填充(Padding) - 不表示必须的,也没特别含义,仅仅起到占位符的作用。