说明:此文件只是笔记供以后参考,有需要的随便瞅瞅。
为什么64位的jdk内存不建议超过32G?
因为内存在32G一下,jdk会开启指针压缩,减少内存空间占用。
何为指针压缩,先来说一下内存,为何32位的内存只有4G?
如果按照常规计算 2的32次方算出来的只有512M,其实 机器内存是通过一个个小格子来存储的,一个小格子为1bit(位),但是它把8个小格子即8bit(1byte)作为寻址地址的最小单位,所以
2的32次方 即 2的32次方的byte 然后 乘 8bit,即得出4G的内存。
java 为何只在32G内存下指针压缩?
在64位操作系统下,java如果没有指针压缩,则需要用64位即8byte 来表示所有的地址,这样的话,那64位的jvm内存占用会比32位 多处1.5倍左右,那如何用4个字节 32位表示64位的所有的地址呢?jvm 参考计算机内存的方式,将8byte作为一个基本的内存单位,不足的会填充,所以4个字节最多表示4G,在指针压缩情况下 4*8=32G的内存。