JVM -- 对象的内存布局

JVM – 对象的内存布局

JVM -- 对象的内存布局

内存布局

1️⃣对象头(Header)

      包含两部分

              运行时数据区(Mark World)

                        ✔哈希值(HashCode)
                        ✔GC分代年龄
                        ✔锁状态标志
                        ✔线程持有的锁
                        ✔偏向线程ID
                        ✔偏向时间戳

              类型指针:如果是数组,还需记录数据的长度

      说明:如果是数组,还需记录数组的长度

2️⃣实例实例(Instance Data)

      说明

              1.它是对象真正存储的有效信息,包括程序代码中定义的各种类型的字段(包含从父类继承下来的和本身拥有的字段)

      规则

              1.相同宽度的字段总是被分配在一起
              2.父类中定义的变量会出现在子类之前
              3.如果CompactFields参数为true(默认为true):子类的窄变量可能插入到父类变量的空间

3️⃣对齐填充(Padding)

       不是必须的,也没特别含义,仅仅起到占位符的作用