了解最大JVM堆大小 - 32位与64位

Mar*_*eon 33 java heap jvm

我已经读过 32位Windows上的最大堆大小约为1.5GB,这是因为JVM需要连续的内存.有人可以解释"连续内存"的概念,以及为什么在Windows上只有1.5GB的最大值?

其次,64位Windows上的最大堆大小是什么,为什么这与32位可用的不同?

Pac*_*ace 36

32位/ 64位部分与Java无关

事实证明,32位系统中的内存位置由32位无符号整数引用.这允许最多2 ^ 32个可能的存储位置.由于每个位置存储1个字节,因此您可以获得2 ^ 32个字节或4 GB.

在64位系统上有2 ^ 64个位置,或16艾字节.

现在,在Windows中,连续部分成为一个大问题,但这就是Windows的工作方式.这个想法是你需要为你的堆拥有一个完整的"不间断"范围.可悲的是,Windows在中间某处分配了一些内存.这基本上会让你大约一半的左侧或一半的右侧,大约1.5-2GB的块,以分配你的堆.

有关32对64位的更多详细信息,请查看此问题.

编辑:感谢mrjoltcola的exa前缀!


cod*_*eim 6

连续只是意味着"没有间隙",一个长单个部分.该数量受操作系统可为您的流程映射的段大小的限制.Java是否需要连续堆是JVM特有的实现问题,而其他VM可能不存在.