为什么在使用 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
我有一个 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