【问题标题】:Specifying JVM heap sizes in JAR在 JAR 中指定 JVM 堆大小
【发布时间】:2012-08-25 11:26:26
【问题描述】:

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

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

【问题讨论】:

  • 有一个bat文件或者shell脚本来启动java怎么样?

标签: java memory jar jvm manifest.mf


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-05
      • 2012-01-10
      • 2011-09-22
      • 2015-02-06
      • 2012-07-18
      • 2010-11-29
      • 1970-01-01
      • 2010-10-20
      相关资源
      最近更新 更多