如果要使用32位引用,则堆限制为32 GB。
但是,如果您愿意使用64位引用,则大小可能会受到操作系统的限制,就像32位JVM一样。例如,在Windows 32位上,这是1.2到1.5 GB。
注意:您将希望您的JVM堆适合主内存,最好在一个NUMA区域内。在较大的计算机上大约为1
TB。如果您的JVM跨越NUMA个区域,则内存访问(尤其是GC)将花费更长的时间。如果您的JVM堆开始交换,则可能要花费数小时才能到达GC,甚至会破坏交换驱动器,甚至使您的计算机不可用。
注意:即使在堆中使用32位引用,也可以访问大型直接内存和内存映射大小。即使用远高于32 GB的内存。
热点JVM中的压缩oop
压缩的oop将托管指针(在JVM中的很多但不是所有位置)表示为32位值,必须将其缩放8倍,并添加到64位基址中才能找到它们所引用的对象。这使应用程序可以处理多达40亿个对象(而不是字节),或堆大小约为32Gb。同时,数据结构的紧凑性与ILP32模式具有竞争优势。



