Java对象的内存布局

Java对象的内存布局

马草原 570 2021-03-30

Java对象的内存布局

HotSpot虚拟机里,对象在堆内存中的存储布局可以划分为三个部分:

  • 对象头(Header)

    • 对象自身的运行时数据:哈希码、GC分代年龄、锁状态标志、线程持有的锁、偏向线程ID等
    • 对象指向它的类型元数据的指针:Java虚拟机通过这个指针 来确定该对象是哪个类的实例
    • MarkWord
  • 实例数据(Instance Data)

    • 对象真正存储的有效信息:我们在代码中所定义的字段以及父类继承的各种类型的字段内容
  • 对齐填充(Padding)

    • 占位符:并不是必然存在的,也没有特别的含义,由于HotSpot虚拟机的自动内存管理系统要求对象起始地址必须是8字节的整数倍因此可能需要使用占位符进行对齐填充