标记字段:哈希码、GC信息、锁信息等
类型指针:指向该对象的类
64位虚拟机:标记字段占64位,类型指针占64位;整个对象头占16字节(额外开销)
减少对象的内存使用量
-XX:+UseCompressedOops 默认是开启的
将堆中原本64位的对象指针压缩到32位,对象头从16字节减少到12字节
作用于:对象头的类型指针、引用类型、引用类型数组
原理:
内存对齐(-XX:ObjectAlignmentInBytes,默认值8)
Java虚拟机堆中的对象的起始位置需要对齐到8的倍数
原因:
减少内存使用,较大指针在主内存和缓存之间移动数据,占用带宽,同时会给GC带来压力
在JVM中,32位地址最大支持4G(2的32次方),可以通过对对象指针存入堆内存时压缩编码,取出到CPU寄存器后解码方式进行优化(对象指针在堆中32位,在寄存器中是35位,2的35次方=32G),使得JVM只使用32位地址就可以支持更大的内存配置
对每个类中的字段进行重排列,使字段也能够内存对齐