Java - ProcessBuilder没有将-XX:MaxDirectMemorySize传递给JVM。

问题描述 投票:1回答:1

我有一个Java程序,由于缺乏直接内存而导致OutOfMemoryError.它可以很容易地修复,当我设置了 -XX:最大直接内存大小 到更大的内存大小。在命令行下工作正常。

java -XX:MaxDirectMemorySize=1024m -jar launcher1.4.5.jar

但是当我用同样的开关运行同样的程序时,使用的是 流程建设者 即使我设置了-XX:MaxDirectMemorySize开关,我仍然得到同样的OutOfMemoryError。

List<String> command = new ArrayList<String>();
command.add("java");
command.add("-XX:MaxDirectMemorySize=1024m");
command.add("-Xmx1024m");
command.add("-jar");
command.add("launcher1.4.5.jar");

ProcessBuilder processBuilder = new ProcessBuilder();
processBuilder.command(command);
File log = new File("log");
if(log.exists()) {
    log.delete();
}
processBuilder.redirectErrorStream(true);
processBuilder.redirectOutput(ProcessBuilder.Redirect.appendTo(log));
Process process = processBuilder.start();

StreamGobbler sg = new StreamGobbler(process.getInputStream(),System.out::println);
Executors.newSingleThreadExecutor().submit(sg);
int exitCode = process.waitFor();
System.out.printf("Program ended with exitCode %d", exitCode);

现在,如果我将 "java -XX:MaxDirectMemorySize=1024m -jar launcher1.4.5.jar "传递给一个 "java -XX:MaxDirectMemorySize=1024m -jar launcher1.4.5.jar"。蝙蝠 文件,然后使用ProcessBuilder运行该bat文件,就可以正常工作了。所以问题是ProcessBuilder在运行jar文件时没有发送-XX:MaxDirectMemorySize开关给JVM。

java out-of-memory processbuilder
1个回答
0
投票

OK,所以看起来这个奇怪的问题的根本原因是由于Java的安装,这似乎是为你的Java安装的。三十二位. 把它改成64位,现在一切都很好.我用它检查。

java -XshowSettings:properties -version
© www.soinside.com 2019 - 2024. All rights reserved.