我有一个用Java实现的游戏,当从脚本运行太多代码时出现问题:根据脚本语言,游戏可能会出现这些“打嗝”,游戏会偶尔冻结几帧,有时让游戏“生涩”。
经过一番研究,我发现当垃圾收集器决定运行时就会发生这种情况。经过一些研究和测试后,我发现使用增量垃圾收集器(通过使用-Xincgc VM参数)修复了问题。是的,我知道它使GC运行速度慢了约10%,但这是我付出的代价。
有了这些背景信息,现在我要做的就是将游戏打包成.jar就像我到目前为止所做的一样,但我知道没有办法让应用程序使用增量GC而不使用-Xincgc,而我不希望在用户只需双击.jar之前创建.bat / .sh文件。
有没有办法让.jar运行增量GC而不需要某种加载器(.bat / .sh)或它周围的包装器?有没有办法在.jar中包含该参数?
答案 0 :(得分:5)
不,没有办法做到这一点。 VM参数只能作为命令行参数提供给JVM调用:Java Tool
答案 1 :(得分:3)
您绝对可以使用JNLP执行此操作,{{3}}可以配置为向桌面添加快捷方式,并自动保持jar更新等。
答案 2 :(得分:1)
从一个jar文件中,你不能这样做。添加Java WebStart可以允许您添加java VM命令。如果您不反对将jar包装在可执行文件Launch4J中,那么jar也会将jar包装在可执行文件中。它只生成一个Windows exe,但它可以在linux或windows上生成。我还没有找到一个很好的替代Linux。
答案 3 :(得分:0)
我不知道内部coorporate之外的太多java应用程序或人们通过点击jar运行的开发人员。即使是快捷方式也可以指定。存在的Fancier选项允许您创建exe,作为服务运行,甚至将整个事物包装在安装程序中......如果我们正在谈论Windows,那么Linux也存在类似的事情。
答案 4 :(得分:0)
除了Java Web Start之外,您还可以考虑使用JSMooth进行包装。它提供了一个EXE,它又调用JVM - 你可以在那里提供参数。
答案 5 :(得分:0)
一个选项 - 我总是想知道 - 当参数不合适时,用Runtime.exec()调用重新运行jar程序?从未尝试过,但似乎有可能。