我有一个 Java 程序,它创建 4 个 MAX_INTEGER - 2
长度的空字节数组,然后在 main 方法中的无限 while
循环上停止。
我已将 Windows Java 设置包含参数 -Xms12g -Xms12g
(我有 16GB RAM)。
当在 Netbeans IDE 中运行程序并为 VM 设置相同的参数时,程序会执行,我可以在任务管理器中看到正在使用约 8g RAM,这与我的预期差不多。
我已将该程序编译为独立的 .jar 文件,以便我可以从 Powershell 外部运行它,但在尝试运行该行时:
java -jar prog.jar -Xms12g -Xmx12g
有人告诉我不知何故超出了堆空间,但我刚刚通过 IDE 发现情况并非如此:
-XX:MaxPermSize=12g
似乎也没有什么区别,并且 IDE 的 VM 不需要此参数。
我在这里缺少什么?
-
完整源代码:
package prog;
public class Prog
{
public static final byte[] arr1 = new byte[Integer.MAX_VALUE - 2];
public static final byte[] arr2 = new byte[Integer.MAX_VALUE - 2];
public static final byte[] arr3 = new byte[Integer.MAX_VALUE - 2];
public static final byte[] arr4 = new byte[Integer.MAX_VALUE - 2];
public static void main(String[] args)
{
while(true);
}
}
最佳答案
事实证明,我需要的命令是:
java -jar -Xmx12g -Xms12g prog.jar
不是:
java -jar prog.jar -Xmx12g -Xms12g
正如我一直认为的那样。
我没有意识到第一个参数是针对 JVM 的,第二组参数(在 .jar 之后)是针对 .jar 的
关于java - 为什么当使用 Powershell 指定 -Xms 和 -Xmx 时它们不执行任何操作,但通过 Netbeans IDE 可以正常工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59690300/