JRE 32位对比64位

Sna*_*Doc 11 java x86 x86-64 jvm-hotspot

我一直在使用Java一段时间,而我设置新开发机器的典型仪式需要从Oracle网站下载和安装最新JDK的规范.

这引发了一个不寻常的问题, does it matter if I use the 32bit or 64bit JRE bundle?

回过头来看,我之前已经安装了两个版本,而且我的普通工具链很快就插入了(Eclipse).在我的日常编程中,我不记得曾经因为我使用的是64位JRE(或针对这方面的目标是64位JRE)而不得不以不同的方式改变某些东西或思考某些东西.

根据我对64位与32位的理解 - 它实际上归结为数字如何存储在封面下...我知道这int是32位并且long是64位...与float32位相同并且double是64位 - 所以只是Java已经抽象出了这个微妙之处,并且可能一直都是"64位兼容"吗?

我确定我在这里遗漏了一些东西,除了无法在32位系统上安装64位JRE.

cam*_*ecc 20

64位与32位实际上归结为对象引用的大小,而不是数字的大小.

在32位模式下,引用是四个字节,允许JVM唯一地寻址2 ^ 32字节的内存.这就是32位JVM限制为4GB的最大堆大小的原因(实际上,由于其他JVM和OS开销,限制较小,并且根据操作系统而不同).

在64位模式下,引用是(惊讶)8个字节,允许JVM唯一地寻址2 ^ 64字节的内存,这对任何人来说应该足够了.-Xmx64位模式下的JVM堆大小(以其指定)可能很大.

但是64位模式带来了成本:引用的大小增加了一倍,增加了内存消耗.这就是Oracle推出"Compressed oops"的原因.启用压缩oops(我相信现在是默认值),对象引用缩小到四个字节,但需要注意的是堆限制为40亿个对象(和32GB Xmx).压缩的oops不是免费的:实现内存消耗的大幅减少需要很小的计算成本.

作为个人喜好,我总是在家里运行64位JVM.CPU支持x64,操作系统也是如此,所以我也喜欢JVM在64位模式下运行.

  • 压缩的oops一直是默认的,因为它非常永远(至少5年).最重要的是,有几种压缩oops的"模式",具体取决于堆大小范围,因此对于相同大小的堆(~2GB或更小),你可以使用32位,你不要t使用压缩的oops需要很多成本(不需要缩放,oops可以直接使用高位零).所以64位接近严格更好. (2认同)

And*_*mas 5

如您所知,Java中的原始数字类型是明确定义的.

然而,32位和64位JVM之间的选择可以,如果你的Java应用程序使用本机代码库,它可以在32位应用程序,64位应用程序,或两者使用内置无所谓.

如果您的本机库仅支持32位应用程序,则需要使用32位JVM,或者构建64位版本的库.