Java对象的内存布局
在HotSpot
虚拟机里,对象在堆内存中的存储布局可以划分为三个部分:
-
对象头(Header)
- 对象自身的运行时数据:哈希码、GC分代年龄、锁状态标志、线程持有的锁、偏向线程ID等
- 对象指向它的类型元数据的指针:Java虚拟机通过这个指针 来确定该对象是哪个类的实例
-
实例数据(Instance Data)
- 对象真正存储的有效信息:我们在代码中所定义的字段以及父类继承的各种类型的字段内容
-
对齐填充(Padding)
- 占位符:并不是必然存在的,也没有特别的含义,由于HotSpot虚拟机的自动内存管理系统要求对象起始地址必须是8字节的整数倍因此可能需要使用占位符进行对齐填充