java对象的存储结构和指针压缩学习
在HotSpot虚拟机里,对象在堆内存中的存储不惧可以划分为三个部分:
对象头(Header)、实例数据(Instance Data)和对齐填充(Padding)。
对象头:包含了Mark Word(一定存在),元数据指针(一定存在),数组size(如果这个对象是个数组对象的话)。
实例数据:类元信息中定义的变量数据
对齐填充:可能存在的部分,同对象头一样,为了8字节对齐的无实际意义填充部分。
64位虚拟机来说,低于32G内存,默认开启指针压缩,那么堆中的对象是这样子的。
可以使用jol包来观察对象的存储结构,引入pom文件 <dependency> <groupId>org.openjdk.jol</groupId> <artifactId>jol-core</artifactId> <version>0.10</version> </dependency>