我正在尝试编写一个游戏引擎,但它需要比默认设置更多的内存。我知道如果您双击一个 jar,则会使用默认设置。那么我是否可以指定 JAR 在其清单文件(或其他地方?)中需要自定义堆大小?
此外,引擎位于它自己的 jar 中,游戏位于另一个 jar 中,引擎作为库。如果我在两个 JAR 中指定不同的限制,JVM 将优先考虑哪一个?
中没有任何属性清单规格 http://docs.oracle.com/javase/1.4.2/docs/guide/jar/jar.html#JAR%20Manifest您可以使用它来控制堆空间。相反,您可以在应用程序中编写一个启动器主方法,该方法使用您的真正主方法之一执行第二个进程Runtime.exec http://docs.oracle.com/javase/6/docs/api/java/lang/Runtime.html#exec%28java.lang.String%29实施。既然您可以访问java.home http://docs.oracle.com/javase/tutorial/essential/environment/sysprop.html系统变量,您可以使用运行启动器的 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>");
Using java.home
获取Java路径可以避免路径问题。如果您决定更改程序的启动方式,这也将使您能够控制将来的启动。例如,可以将其更改为使用Process http://docs.oracle.com/javase/6/docs/api/java/lang/Process.html这样您还可以在启动器中等待进程终止,从而在游戏的 JVM 完全终止时控制运行后清理。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)