::指针压缩

这涉及到对象存储布局,在对象的存储布局中,会有kclass指向类元数据。如果开启了指针压缩,指针地址就是4字节。
好处:

  1. 加了GC开销:64位对象引用需要占用更多的堆空间,留给其他数据的空间将会减少,
    从而加快了GC的发生,更频繁的进行GC。

  2. 降低CPU缓存命中率:64位对象引用增大了,CPU能缓存的oop将会更少,从而降低了CPU缓存的效率

4Byte = 32bit,即可以表示2^32 = 4GB。如果内存地址是指向 bit的话,32位的最大寻址范围其实是 512MB,但是由于内存里,将8bit为一组划分,所以内存地址就其实是指向的8bit为一组的byte地址,所以32位可以表示的容量就扩充了8倍,就变成了4GB。
VM的内存指针,是以8字节为一组。在操作系统64位情况下(32位系统最大支持4G物理内存),java对象模型中,类指针可能是4字节(32位,开启压缩情况下) ,或者是8字节(无开启压缩下)。在开启指针压缩情况下,每8个字节为一组,即 2^32 Byte *8 = 32G。即压缩情况下,4字节(32位)的对象位,只能表示32G。