Java 未正确保留巨大的初始堆大小
2022-09-03 06:46:15
我正在使用一台具有512GB RAM的机器(由几个AMD皓龙6212 CPU解决)。目前大约有300GB的内存可用。通过运行运行大型 Java 计算
java path/to/myApp -Xms280g -Xmx280g > output.txt
应该使Java立即保留280GB,如果失败,则出错。奇怪的是,没有发生错误,但只显示内存使用率为30.4GB,但它不会崩溃。怎么会这样?如果无法分配初始堆大小,Java难道不应该崩溃吗?top
实际上,一旦30.4GB满了,我就会得到OutOfMemory/Java堆空间/GC开销限制错误,远远早于达到280GB。使用 250GB 或 300GB 运行会产生类似的 30.3GB ~ 30.4GB 限制。我在Gentoo Linux上运行OpenJDK 64位服务器VM和OpenJDK运行时环境(IcedTea6),并且有足够的免费RAM(超过300GB)。