如何在开始运行jar文件时设置-Xmx?

Jud*_*ing 35 java jar

因为我们知道,我们可以设置-Xmx1024Mwindow->preferences->java->installed jres->edit->default vm arguments日食.但是当我将这个项目打包成一个可运行的jar文件时,如何设置-Xmx1024M运行jar的时间java -jar A.jar

非常感谢!

Phi*_*kle 121

不幸的是,现有答案在一个关键点上是错误的.

-Xmx 必须传递给Java运行时环境,而不是传递给执行的jar.

错误:

java -jar JavaApplication.jar -Xmx1024m 
Run Code Online (Sandbox Code Playgroud)

正确:

java -Xmx1024m -jar JavaApplication.jar 
Run Code Online (Sandbox Code Playgroud)

更具体地说,java启动程序需要使用如下:

java [options] -jar file.jar [arguments]

  • [options] 传递给Java运行时环境
  • [arguments] 传递给main函数

-Xmx参数属于(非标准)JVM选项,并且 - 作为选项 - 需要在-jar之前(或至少在file.jar之前)列出.JVM将无法识别-Xmx传递给main函数的参数,如其他答案中所建议的那样.

  • 粗心的陷阱–不好笑,但是-Xmx参数语法区分大小写。我不停地试图解决修改快捷方式目标属性导致我无法使用它的原因,这就是为什么。 (2认同)

小智 9

尝试java -Xmx1024m文件名。

我在 StackOverflow 上找到了这个Java 选项 -Xmx 代表什么?例如,当我启动 Netbeans 时使用它。

像这样使用它

java -Xmx1024m -jar JavaApplication.jar
Run Code Online (Sandbox Code Playgroud)

info: -Xmxn 指定内存分配池的最大大小(以字节为单位)。该值必须是 1024 的倍数且大于 2MB。附加字母 k 或 K 表示千字节,或附加 m 或 M 表示兆字节。默认值为 64MB。在 Solaris 7 和 Solaris 8 SPARC 平台上,该值的上限约为 4000m;在 Solaris 2.6 和 x86 平台上,该值的上限约为 2000m,减去开销量。

  • 上面的答案是错误的 - 所有 JVM 参数都应该在 java 之后传递:即 java -Xmx4G -Xms1G .... your_jar.jar (8认同)
  • 请注意,在您建议的解决方案中,“-Xmx1024m”被传递到执行的 jar 文件,而不是按预期传递到 JVM。有关详细信息,请参阅我的答案:http://stackoverflow.com/a/42207984/7492402 (6认同)
  • 上面是错误的,请参阅下面的答案,作者:@PhilippMerkle (2认同)

use*_*991 6

三种方法:

  • 命令行:
    • 指示用户使用"java -jar SampleJavaApp.jar -Xmx1024m"运行应用程序
  • Java控制面板:
    • 默认情况下,指示您的用户将更多内存专用于Java:Win7指南
  • 使用适当的Xmx值重新启动jar.

最后一个选项是"邪恶的",但不需要您的用户做任何额外的努力.这是一个示例代码块:

public static void main(String[] args) throws IOException, URISyntaxException {
    String currentPath=SampleJavaApp.class
          .getProtectionDomain()
          .getCodeSource().getLocation()
          .toURI().getPath()
          .replace('/', File.separator.charAt(0)).substring(1);
    if(args.length==0 && Runtime.getRuntime().maxMemory()/1024/1024<980) {
        Runtime.getRuntime().exec("java -Xmx1024m -jar "+currentPath+" restart");
        return;
    }
}
Run Code Online (Sandbox Code Playgroud)