对象的内存布局
-
对象头(Header),包含两部分,如果是数组,还需记录数组的长度
-
运行时元数据(Mark Word)
-
哈希值(HashCode)
-
GC分代年龄
-
锁状态标志
-
线程持有的锁
-
偏向线程ID
-
偏向时间戳
-
-
类型指针,指向类元数据InstanceKlass,确定该对象所属的类型
-
-
实例数据(Instance Data),是对象真正存储的有效信息,包括程序代码中定义的各种类型的字段(包括从父类继承下来的和本身拥有的字段)
- 相同宽度的字段总是被分配在一起
- 父类中定义的变量会出现在子类之前
- 如果CompactFields参数为true(默认true),子类的窄变量可能插入到父类变量的空隙
-
对齐填充(Padding),不是必须的,也没有特别含义,仅仅起到占位符的作用
须的,也没有特别含义,仅仅起到占位符的作用