堆内存超过32G时,为什么压缩指针失效

对象内存布局:

堆内存超过32G时,为什么压缩指针失效

对象头中的Class Pointer默认占8个字节,开启-XX:+UseCompressedOops后,为了节省空间压缩为4个字节,4*8=32位表示可寻址4G个对象,在内存空间小于32G时,可以通过编码、解码方式进行优化,使得jvm可以支持更大的内存配置。当堆内存大于32G时,压缩指针参数会失效,会强制使用64位(即8字节)来对java对象寻址。

参考:https://www.zhihu.com/question/365436606