命令未在更改最大堆大小时运行

时间:2013-12-17 05:19:11

标签: java process heap-memory processbuilder

JAVA -Xms500M -Xmx1800M -XX:+UseConcMarkSweepGC -classpath C:\XYZ\MY_installer\lib\jlex.jar;C:\XYZ\MY_installer\lib\antlr.jar;C:\XYZ\MY_installer\lib\mytemplate.jar;C:\XYZ\MY_installer\lib\log4j-1.2-api-2.0-beta8.jar;C:\XYZ\MY_installer\lib\log4j-api-2.0-beta8.jar;C:\XYZ\MY_installer\lib\log4j-core-2.0-beta8.jar;C:\WORKSPACES\delnaz\del_prj;  -DENVFILE=C:\XYZ\MY_installer\bin\escat.ini utilities.graph.GraphDriver C:\XYZ\MY_installer "C:\WORKSPACES\delnaz\del_prj\del.prj" "C:\WORKSPACES\delnaz\del_prj" 1

问题:这是需要上面描述的jar环境的命令,如果我将最大堆大小1400转换为1000,虽然我知道jar不会对堆做任何事情,但是工作正常。但我想知道它正在改变的原因,或者可能是什么原因。

String cmdArr[] = {"cmd.exe", "/C" , cmdString};
                    ProcessBuilder pb = new ProcessBuilder(cmdArr);
                    Map<String, String> env = pb.environment();
                    env.put("PATH", System.getenv("PATH"));
                    env.put("ROOT", rootPath);
                    env.put("SYSTEMROOT", System.getenv("SYSTEMROOT"));
                    if(cmdString.endsWith("cfe.bat"))
                        pb.directory(new File("TextFiles"));
                    else
                        pb.directory(new File(Workspace_path));
                    process = pb.start();

java版本是:

java version "1.7.0_21"
Java(TM) SE Runtime Environment (build 1.7.0_21-b11)
Java HotSpot(TM) Client VM (build 23.21-b01, mixed mode, sharing)

Windows 7 Enterprise

RAM 4GB

32 bit OS

另一个蠢货: 我们需要Maxheap大小的原因是我们无法选择在标准选项上运行应用程序。

3 个答案:

答案 0 :(得分:2)

这两个命令选项

-ms500M -mx1800M

应该是

-Xms500M -Xmx1800M

答案 1 :(得分:0)

您使用的是32位版本的JDK吗?

32位JDK具有最大堆大小限制(就像32位操作系统不能使用超过4GB的RAM)。

使用64位版本的JDK(假设您有64位操作系统)。

编辑:

由于您现在已经提到过您使用的是32位操作系统,因此我有一些坏消息。

除非转移到64位系统,否则无法增加堆大小。

点击此处了解详情:https://stackoverflow.com/a/7019624/1862828

唯一的解决方案是重构您的程序,以便它使用更少的内存并使用较小的值来为{mmx -Xmx1000M

答案 2 :(得分:0)

这只适用于64位版本的java。

转到control panel> java icon。打开java控制面板的小窗口。

点击java menu bar >view button

如果您有两个java平台,请禁用以前版本的java,然后单击Runtime parameters文本字段。

在此处记下-Xmx1024m或小于RAM SIZE。不要将堆大小增加到等于RAM,否则系统将崩溃。