read在32位Windows上的最大堆大小是〜1.5GB,这是由于JVM需要连续内存。有人可以解释“连续内存”的概念吗,为什么Windows上最多只有1.5GB?

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

最佳答案

32位/64位部分与Java无关

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

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

现在,在Windows中,连续的部分成为一个大问题,但这就是Windows的工作方式。这个想法是您需要为堆提供一个完整的“不间断”范围。可悲的是,Windows在中间的某个地方分配了一些内存。基本上,这将使您剩下大约一半的左侧或一半的右侧(大约1.5-2GB的块)来分配堆。

请查看this question,以获得有关32位和64位的更多详细信息。

编辑:感谢mrjoltcola的exa前缀!

10-07 19:36
查看更多