【问题标题】:Command not running in changing max heap size命令未在更改最大堆大小时运行
【发布时间】:2013-12-17 05:19:10
【问题描述】:
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 大小的原因是我们是否没有可以查看以标准选项运行应用程序的选项。

【问题讨论】:

标签: java process heap-memory processbuilder


【解决方案1】:

这两个命令选项

-ms500M -mx1800M

应该是

-Xms500M -Xmx1800M

【讨论】:

    【解决方案2】:

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

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

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

    编辑:

    既然您现在提到您使用的是 32 位操作系统,我有一些坏消息要告诉您。

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

    查看更多信息:https://stackoverflow.com/a/7019624/1862828

    对此的唯一解决方案是重构您的程序,使其使用更少的内存并为 Xmx 使用更小的值,例如 -Xmx1000M

    【讨论】:

    • @tripathi 前几天在 -Xmx1400M 上运行良好,但现在在 -Xmx(1000 到 1390)上运行:错误:无法创建 Java 虚拟机。错误:发生了致命异常。程序将退出。
    • 32 位 JDK 是罪魁祸首。您不能使用超过 1400M 的内存。几个月前,我自己也遇到过同样的问题。
    • 但我的应用程序没有任何 32 位 jdk 规范..问题是在它工作正常之前...好吧同意 1.4G 到 1.6G 但在某些系统中它甚至无法正常工作1200M ..这种变化很痛..我知道它可能是因为系统使用
    • 为什么我们需要 Maxheap 大小的原因是我们可以没有选项来查看在标准选项上运行应用程序。如果目前不想涉足内存优化技术。在基本级别上,我已经测试了没有那么多的编码缺陷
    • 这取决于JVM启动时可用的内存量。如果只有 1000M 可用,而 JVM 要求 1200M,它不会得到它,是吗?要么修改程序以减少内存占用,要么迁移到 64 位系统并增加 RAM。
    【解决方案3】:

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

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

    点击javamenu bar &gt;view button

    如果你有两个java平台,禁用以前版本的java,然后点击运行时参数文本字段。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-25
      • 1970-01-01
      • 1970-01-01
      • 2022-01-04
      • 2012-03-05
      • 1970-01-01
      • 2020-04-08
      • 2011-05-09
      相关资源
      最近更新 更多