一尘不染

64位OS上32位JVM的最大Java堆大小

java

问题不在于32位操作系统的最大堆大小,因为32位操作系统的最大可寻址内存大小为4GB,而JVM的最大堆大小取决于可以保留多少连续可用内存。

我对了解在64位OS中运行的32位JVM的最大(理论上和实际可实现的)堆大小更感兴趣。基本上,我正在寻找类似于SO相关问题中的数字的答案。

至于为什么使用32位JVM而不是64位JVM,原因不是技术上的而是管理/官僚的-在生产环境中安装64位JVM可能为时已晚。


阅读 628

收藏
2020-03-01

共1个答案

一尘不染

期望只有一个大块内存并使用原始指针的32位JVM不能使用超过4 Gb(因为32位限制也适用于指针)。这包括Sun以及-我很确定-还包括IBM的实现。我不知道是否JRockit或其他人在其32位实现中具有较大的内存选项。

如果您希望达到此极限,则应强烈考虑为您的生产环境启动一个并行轨道,以验证64位JVM,以便在32位环境崩溃时做好准备。否则,您将不得不在压力下进行这项工作,这绝非好事。

编辑2014-05-15:Oracle常见问题解答:

32位JVM的最大理论堆限制为4G。由于各种其他限制,例如可用交换,内核地址空间使用,内存碎片和VM开销,实际上限制可能要低得多。在大多数现代的32位Windows系统上,最大堆大小范围为1.4G至1.6G。在32位Solaris内核上,地址空间限制为2G。在运行32位VM的64位操作系统上,最大堆大小可能更高,在许多Solaris系统上接近4G。

2020-03-01