当我尝试启动 java 时,我正在设置标志 Xms 和 Xmx 以定义堆中的最小和最大内存
C:\ProgramData\Oracle\Java\javapath\java.exe -Xms200M -Xmx1536M
结果,Java 询问我没有足够的可用空间
Error occurred during initialization of VM
Could not reserve enough space for 1572864KB object heap
但是,如果我设置,例如,-Xmx756,它工作正常!
那么,为什么Java不能预留内存呢?我有 16GB RAM,但使用的内存不到一半。 为什么 Java 尝试保留最大内存量,因为我设置的范围是 200 到 1536?
最佳答案
您提到的“最大”内存量需要可用(即使它在开始时没有保留 - 您可以在 jvisualvm 中看到)。由于某种原因,您的大部分物理内存都不可用。最常见的原因是:
您可能正在运行 32 位版本的 Java。请改用 64 位版本,这样您可以预留更多内存。
关于java - 为什么 Java 会尝试从堆中保留最大空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46828534/