系统分为32和64位。32位可以寻址2^32,也就是4g的内存大小。所以32位的机,你就算给8g内存,也没有多大用处。64位的机,可想寻址会很大。
1.压缩
对于jvm,默认是按8字节对齐的。
对于虚拟机,不开起指针压缩,一个对象,定义一个成员变量int类型,对象头中的markword是8个字节,类型指针是8个字节,没有数组的话,数组长度0个字节。实例数据int 4个字节,padding补4个字节,总24,是8的倍数。
开起指针压缩,类型指针是4个字节,总16字节,不用对齐padding。
2.原理
对于32位机,地址0x1,0x2,..可以寻址到2^32
对于64位,如果8个字节为寻址宽度呢0x1000,0x2000。会发现是补了000。
那么2^32是在堆中的存储,在寄存器中可以补位000,变为2^35。大概32g
所以超过了32,其实大约31g,指针压缩会失效
850

被折叠的 条评论
为什么被折叠?



