1

这是相当令人费解的,64 位操作系统,64 位 JDK,16GB 的 RAM,我无法使用超过 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。我很高兴,总内存会突然增加,因为它解决了我的问题,但我不明白。

4

1 回答 1

2

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

并检查输出

Runtime.getRuntime().maxMemory()
于 2012-09-14T21:58:26.233 回答