在JAR中指定JVM堆大小

时间:2012-08-30 16:57:40

标签: java memory jar jvm manifest.mf

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

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

2 个答案:

答案 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完全终止时让您控制运行后清理。