Parameters 如何强制JVM 64位使用超过4GB的堆?

Parameters 如何强制JVM 64位使用超过4GB的堆?,parameters,jvm,heap-memory,Parameters,Jvm,Heap Memory,这是相当令人费解的,64位操作系统,64位JDK,16GB内存,我不能使用超过4GB的堆。以下是我如何启动程序(我的程序是Scala,但它基于JVM): 当我读取程序中的总内存时(Runtime.getRuntime().totalMemory())。。。读数为“42MB” 问题——如何强制JVM使用我已经提供的内存量(10GB) java-version说: java version "1.6.0_29" Java(TM) SE Runtime Environment (build 1.6.0

这是相当令人费解的,64位操作系统,64位JDK,16GB内存,我不能使用超过4GB的堆。以下是我如何启动程序(我的程序是Scala,但它基于JVM):

当我读取程序中的总内存时(
Runtime.getRuntime().totalMemory()
)。。。读数为“42MB”

问题——如何强制JVM使用我已经提供的内存量(10GB)

java-version
说:

java version "1.6.0_29"
Java(TM) SE Runtime Environment (build 1.6.0_29-b11)
Java HotSpot(TM) 64-Bit Server VM (build 20.4-b02, mixed mode)
更新1
maxMemory
返回“9102MB”,所以现在有一个问题,差异到哪里去了(1GB和5GB),以及如何使用所有最大内存(我的程序崩溃了,因为它需要2块~3GB的内存,总共4GB是不够的)

更新2
现在,我把所有的读数放在分配之前和之后,惊讶,惊讶,总内存的第一次读数是4GB,第二次也是,但第三次达到8GB。我很高兴,总内存可以突然增加,因为它解决了我的问题,但我不理解。

虚拟机只在真正需要时才会尝试使用所有的
10g
。由于您指定了
-Xmx10g
,这是它将尝试使用的最大内存。程序在需要时是否无法分配超过4g的容量

并检查输出的

Runtime.getRuntime().maxMemory()

maxMemory()返回什么?@Burkhard,已更新,谢谢。问题是,我还检查了
freemory
(有关
max
,请参阅更新),当我尝试分配第二个块时,它将适合10GB,但不适合4GB,我的程序异常崩溃。
Runtime.getRuntime().maxMemory()