为什么在使用 Powershell 指定 -Xms 和 -Xmx 时它们什么都不做,但通过 Netbeans IDE 可以正常工作?

Why when using Powershell to specify -Xms & -Xmx do they not do anything, but work fine through Netbeans IDE?

我有一个 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 我被告知我以某种方式超出了堆 space,但我刚刚通过 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