2

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

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

4

2 回答 2

3

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

您可以做的是使用 Runtime.exec() 所需的选项让 JAR 自行重新启动

于 2012-08-30T17:01:37.387 回答
3

清单规范中没有任何属性可用于控制堆空间。相反,您可以在您的应用程序中编写一个启动器主方法,该方法使用您的真正主方法使用其中一种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 完全终止时控制运行后清理。

于 2012-08-30T17:24:35.397 回答