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

时间:2012-09-14 21:47:22

标签: parameters jvm heap-memory

这非常令人费解,64位操作系统,64位JDK,16GB内存,而且我无法使用超过4GB的堆。以下是我启动程序的方法(我的程序在Scala中,但它基于JVM):

/usr/lib64/jvm/java/bin/java -d64 -Xms512m -Xmx10g ...jars go on

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

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

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。我很高兴,总记忆力可以突然增加,因为它解决了我的问题,但我不明白。

1 个答案:

答案 0 :(得分:2)

只有在真正需要时,VM才会尝试使用所有10g。由于您已指定-Xmx10g,因此这是它将尝试使用的最大内存。程序在需要时是否无法分配超过4g的数据?

检查

的输出
Runtime.getRuntime().maxMemory()