ゲーム エンジンを作成しようとしていますが、既定の設定より多くのメモリが必要です。jar をダブルクリックすると、デフォルト設定が使用されることはわかっています。JARがマニフェストファイル(または他の場所)でカスタムヒープサイズを必要とすることを指定できる方法はありますか?
また、エンジンは独自の jar にあり、ゲームは別の jar にあり、エンジンはライブラリとして使用されます。両方の JAR で異なる制限を指定した場合、JVM はどちらを優先しますか?
ゲーム エンジンを作成しようとしていますが、既定の設定より多くのメモリが必要です。jar をダブルクリックすると、デフォルト設定が使用されることはわかっています。JARがマニフェストファイル(または他の場所)でカスタムヒープサイズを必要とすることを指定できる方法はありますか?
また、エンジンは独自の jar にあり、ゲームは別の jar にあり、エンジンはライブラリとして使用されます。両方の JAR で異なる制限を指定した場合、JVM はどちらを優先しますか?
JAR でコマンド ライン オプションを指定することはできません (クラス パスのライブラリを除く)。
できることは、Runtime.exec() で必要なオプションを使用して JAR 自体を再起動させることです。
マニフェストの仕様には、ヒープ領域を制御するために使用できるプロパティはありません。代わりに、実装の 1 つを使用して、実際の main メソッドで 2 番目のプロセスを実行するランチャー 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 が完全に終了したときに実行後のクリーンアップを制御できます。