64位Java的最大内存

在64位平台上,可以为Java分配的最大堆空间量是多少? 它是无限的吗?

理论上是2 64 ,但可能存在局限性(显然)

根据此常见问题解答,它仅受本地系统内存和交换空间的限制:

在64位VM上,您可以使用64位可寻址性,从而导致最大Java堆大小仅受系统提供的物理内存和交换空间量的限制。

另请参见为什么我不能使用32位JVM获得更大的堆?

还要记住,您需要通过命令行设置最大堆。 没有-Xmx命令。 没有它根据相同的FAQ,Java在64位计算机上使用64mb + 30%= 83.2mb作为默认最大堆。

java -Xmx1000g myClass 

在我的机器上正常工作。 但它似乎还不支持’t’修饰符,所以你不能指定太字节的最大内存:)

如果您可以将Universe中的每个primefaces都放入RAM的一个字节中,则可以将其分配到64位地址空间中。

实际上,这有点夸大其词。

宇宙中有10 ^ 80个primefaces(根据WolframAlpha),在64位系统中有2 ^ 64个字节的地址空间,所以你只能解决每5×10 ^ 60个primefaces中的1个。 但是如果你有18个qintillion字节的RAM,你可能需要一些量子黑洞来驱动它。

这可能取决于运行VM的系统。如果您运行的是AMD x64架构,则当前出货的处理器的地址空间使用48位而不是64位。这导致理论上最大值大约为256 TB。 (见http://en.wikipedia.org/wiki/X86-64 )

我不是VM的专家,但任何现代操作系统通常会提供与物理RAM和可用虚拟内存一样多的内存。 可能这就是VM将根据其配置传递给您的应用程序的内容。

使用Sun的最新VM,实际堆限制大小通常是可用物理和/或虚拟内存的512倍。 即使理论上的限制要高得多,VM也会在启动时为每个512字节的堆内存分配1个字节用于管理,因此1TB的堆将立即需要2GB用于内存管理。

理论上它在2^632^64字节之间。

实际上,它受到计算机上可用的物理内存和交换空间的限制。 而物理内存又受到芯片组(即物理内存地址总线上的地址引脚数)和主板(即DIMM插槽的数量和大小)的限制。