这是相当令人费解的,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。我很高兴,总内存会突然增加,因为它解决了我的问题,但我不明白。