我正在尝试编写游戏引擎,但它需要比默认设置更多的内存。我知道如果你双击一个jar,就会使用默认设置。那么无论如何我可以指定JAR需要自定义堆大小的清单文件(或其他地方?)
此外,引擎在它自己的jar中,游戏在另一个中,引擎作为库。如果我在两个JAR中指定了不同的限制,那么JVM会优先考虑哪一个?
答案 0 :(得分:3)
您无法在JAR中指定命令行选项(类路径的库除外)
您可以做的是让JAR重新启动自己,并使用Runtime.exec()
所需的选项答案 1 :(得分:3)
manifest specifications中没有可用于控制堆空间的任何属性。相反,您可以在应用程序中编写一个启动器main方法,该方法使用您的真实main方法使用Runtime.exec
实现之一执行第二个进程。由于您可以访问java.home系统变量,因此您可以使用运行启动程序的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>");
使用java.home
获取Java路径可避免路径问题。如果您决定更改程序的启动方式,这也可以让您控制将来的启动。例如,可以将其更改为使用Process
,这样您也可以等待进程在启动器中终止,从而在游戏的JVM完全终止时让您控制运行后清理。