Java 在JAR中指定JVM堆大小

Java 在JAR中指定JVM堆大小,java,memory,jar,jvm,manifest.mf,Java,Memory,Jar,Jvm,Manifest.mf,我正在尝试编写一个游戏引擎,但它需要比默认设置更多的内存。我知道如果双击一个jar,就会使用默认设置。那么,我是否可以在JAR的清单文件(或其他地方)中指定JAR需要自定义堆大小 另外,引擎在它自己的jar中,游戏在另一个jar中,引擎作为一个库。如果我在两个JAR中指定了不同的限制,JVM会优先选择哪一个?您不能在JAR中指定命令行选项(类路径的库除外) 您可以使用Runtime.exec()所需的选项重新启动JAR本身。中没有任何可用于控制堆空间的属性。相反,您可以在应用程序中编写一个lau

我正在尝试编写一个游戏引擎,但它需要比默认设置更多的内存。我知道如果双击一个jar,就会使用默认设置。那么,我是否可以在JAR的清单文件(或其他地方)中指定JAR需要自定义堆大小


另外,引擎在它自己的jar中,游戏在另一个jar中,引擎作为一个库。如果我在两个JAR中指定了不同的限制,JVM会优先选择哪一个?

您不能在JAR中指定命令行选项(类路径的库除外)


您可以使用Runtime.exec()所需的选项重新启动JAR本身。

中没有任何可用于控制堆空间的属性。相反,您可以在应用程序中编写一个launcher main方法,使用其中一个实现使用真实的main方法执行第二个进程。由于您可以访问系统变量,因此可以使用运行启动器的Java版本来启动游戏

// Fix to use the version appropriate to the OS
String javaPath = System.getProperty("java.home") + "\bin\java.exe";
Runtime.exec("\"" + javaPath + "\" mygame.jar <heap_args>");
//修复以使用适用于操作系统的版本
字符串javaPath=System.getProperty(“java.home”)+“\bin\java.exe”;
Runtime.exec(“\”+javaPath+“\”mygame.jar”);

使用
java.home
获取java路径可以避免路径问题。如果您决定更改程序的启动方式,这也将使您能够控制将来的启动。例如,可以将其更改为使用,以便您也可以等待进程在启动器中终止,从而在游戏的JVM完全终止时控制运行后清理。

使用bat文件或shell脚本启动java如何?