实际上,64位与32位可以归结为对象 引用 的大小,而不是数字的大小。
在32位模式下,引用为四个字节,从而使JVM可以唯一地寻址2 ^
32字节的内存。这就是32位JVM的最大堆大小限制为4GB的原因(实际上,由于其他JVM和OS开销,该限制较小,并且因 *** 作系统而异)。
在64位模式下,引用是(惊奇的)八个字节,从而允许JVM唯一地寻址2 ^
64字节的内存,这对任何人来说都足够了。
-Xmx64位模式下的JVM堆大小(用指定)可能很大。
但是64位模式会带来成本:引用的大小是原来的两倍,从而增加了内存消耗。这就是Oracle引入“ Compressed
oops”的原因。启用压缩的oops(我相信现在是默认设置)后,对象引用将缩小为四个字节,但要注意的是,堆被限制为40亿个对象(和32GB
Xmx)。压缩的 *** 作不是免费的:要实现这种大幅度的内存消耗减少,需要消耗少量的计算成本。
作为个人喜好,我总是在家中运行64位JVM。CPU具有x64功能, *** 作系统也具有x64功能,因此我也希望JVM也以64位模式运行。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)