JVM -- 对象的内存布局
JVM – 对象的内存布局
内存布局
1️⃣对象头(Header)
包含两部分
运行时数据区(Mark World)
✔哈希值(HashCode)
✔GC分代年龄
✔锁状态标志
✔线程持有的锁
✔偏向线程ID
✔偏向时间戳
类型指针:如果是数组,还需记录数据的长度
说明:如果是数组,还需记录数组的长度
2️⃣实例实例(Instance Data)
说明
1.它是对象真正存储的有效信息,包括程序代码中定义的各种类型的字段(包含从父类继承下来的和本身拥有的字段)
规则
1.相同宽度的字段总是被分配在一起
2.父类中定义的变量会出现在子类之前
3.如果CompactFields参数为true(默认为true):子类的窄变量可能插入到父类变量的空间