64位Java的最大内存

64位Java的最大内存,java,heap,Java,Heap,在64位平台上,可以为java分配的最大堆空间量是多少?它是无限的吗?如果你能把宇宙中的每个原子都变成一个字节的RAM,你就可以把它分配到一个64位的地址空间 事实上,这有点夸张 宇宙中有10^80个原子(根据WolframAlpha的说法),64位系统中有2^64字节的地址空间,因此每5x10^60个原子只能寻址1个。但是如果你有18个字节的RAM,你可能需要几个量子黑洞来为它供电。理论上,它介于2^63和2^64字节之间 实际上,它受到计算机上可用的物理内存和交换空间的限制。而物理内存又受到

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

如果你能把宇宙中的每个原子都变成一个字节的RAM,你就可以把它分配到一个64位的地址空间

事实上,这有点夸张


宇宙中有10^80个原子(根据WolframAlpha的说法),64位系统中有2^64字节的地址空间,因此每5x10^60个原子只能寻址1个。但是如果你有18个字节的RAM,你可能需要几个量子黑洞来为它供电。

理论上,它介于
2^63
2^64
字节之间


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

这可能取决于VM运行的系统。如果您运行的是AMDx64体系结构,则当前提供的处理器的地址空间使用48位,而不是64位。这导致理论上的最大容量约为256 TB。(见附件)


我不是虚拟机方面的专家,但任何现代操作系统通常都会提供与物理RAM加上可用虚拟内存一样多的内存。这可能是虚拟机将传递给应用程序的内容,具体取决于其配置。

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

理论上264,但可能存在限制(显然)

据了解,它仅受本地系统上的内存和交换空间的限制:在64位虚拟机上,您需要处理64位的可寻址性,从而导致最大Java堆大小仅受系统提供的物理内存和交换空间的限制

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

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

java -Xmx1000g myClass 

在我的机器上很好用。但它似乎还不支持“t”修饰符,因此您还不能指定最大内存(以TB为单位):

@Stephen,在您发表评论之前,我编辑了答案。沃尔夫拉马尔法规则!我可不想等着全收齐了!就在我觉得Java开始变得无聊的时候,我遇到了像这样的老帖子。相信OOPs,恢复。为什么你认为它是无限的?相关的AMD手册声明,AMD64的虚拟地址空间实际上是64位(第2.2.1章,AMD64体系结构程序员手册,v3.14,2007年9月),对于AMD64,当前的规范预见了40-52个地址引脚。此外,它们还支持NUMA体系结构,其中每个处理器都有一块其他处理器只能间接访问的内存。您能引用一个参考吗?您在这里找不到该参考。这只是VM的实现方式,或者至少是两年前在当前版本中实现的。1000g对您有用吗?我以为
java
会在接受该选项之前验证是否有足够的内存。