JVM – 对象的内存布局

JVM -- 对象的内存布局

内存布局

1️⃣对象头(Header)

      包含两部分

              运行时数据区(Mark World)

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

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

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

2️⃣实例实例(Instance Data)

      说明

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

      规则

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

3️⃣对齐填充(Padding)

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

相关文章:

  • 2021-04-11
  • 2021-10-10
  • 2021-10-13
  • 2021-07-16
  • 2021-12-22
  • 2021-04-13
  • 2022-01-19
  • 2021-07-08
猜你喜欢
  • 2021-07-12
  • 2021-09-18
  • 2021-10-12
  • 2021-05-29
  • 2021-08-15
  • 2022-12-23
  • 2021-08-20
相关资源
相似解决方案