Skip to content

Latest commit

 

History

History
40 lines (18 loc) · 1.24 KB

04.对象内存分布.md

File metadata and controls

40 lines (18 loc) · 1.24 KB

对象内存分布

对象头:

​ 标记字段:哈希码、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位地址就可以支持更大的内存配置

重排列:

​ 对每个类中的字段进行重排列,使字段也能够内存对齐