我有一个Java程序,它创建4个MAX_INTEGER - 2
长度为空的字节数组,然后while
在main方法的无限循环中暂停。
我已将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
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句