私はJava jarファイルを起動していますが、これは多くの場合、デフォルトの64MBの最大ヒープサイズよりも多く必要になります。このアプリケーションには256MBのヒープサイズで十分です。 )jarの起動時に常に256 MBの最大ヒープサイズを使用しますか?(必要に応じて、以下で詳細を説明します。)
これはJavaで記述したコマンドラインアプリで、画像操作を行います。高解像度の画像(約12メガピクセル以上、珍しくありません)でOutOfMemoryErrorが発生します。
現在、私はjarファイルからアプリを起動しています、つまり.
Java -jar MyApp.jar params...
コマンドラインで256 MBの最大ヒープサイズを指定することで、OutOfMemoryErrorを回避できます。
Java -Xmx256m -jar MyApp.jar params...
ただし、高解像度の画像でも256MBで十分であることがわかっているため、これを指定する必要はありません。その情報をjarファイルに保存したいと思います。それは可能ですか?
launch4j のようなラッパーを使用することもできます。これにより、ほとんどのOS:esの実行可能ファイルが作成され、VMオプションを指定できます。
次の行を含むバッチまたはシェルスクリプトを記述します。 MyApp.jarが保存されているフォルダーに入れます。
Java -Xmx256M -jar MyApp.jar
その後、JARファイルを起動するために、常にこのバッチ/スクリプトファイルを開きます。ただし、これはjarファイル自体に仮想メモリサイズの仕様を埋め込みません。ただし、コマンドラインで同じコマンドを頻繁に記述することで問題をオーバーライドできます。
同様のニーズがあり、上記のようにマニフェストでこれを指定できるはずだと考えました。ただし、これは不可能です。私の解決策は、アレックスが上記で提案したものと似ていますが、私がしたことは、メインのメソッドがJavaのProcessBuilderを使用して別のJavaプロセスを開始することでした。新しいプロセス。基本的には1つのJavaプロセスが別のプロセスを開始します。これは少しホーキーですが、機能し、Jarファイルをダブルクリックしてアプリを起動できます。あなたがやりたいことはわかっています。ProcessBuilderを見てください。
見つかった 回答 Googleで。
彼は、JARファイルについてはノー、JavaWeb Startについてはノー、そして(おそらくシステム固有の)ランチャー/ラッパースクリプト/アプリで行うべきだと言っています。
これは素晴らしいことではありませんが、実行可能なJARとして使用し、メインで、プロパティファイルに格納された適切なパラメーターまたは計算されたものなど、非デーモンスレッドとしてコマンドライン経由で実行することができます、元のファイルを終了します。これらのパラメーターを予期する別の「実際の」エントリーポイントでjarを実行することもできます。
はい!あなたは小さなスタータープログラムを書く必要があります-私はそれを行うために小さなほとんどクロスプラットフォーム互換の(パスがうまくいくはずです)プログラムを書きました-以下を参照してください。これは、Windows/Ubuntu/Mac OS Xでテストされています。
どうやらこれはUbuntuで動作するようです
> export _Java_OPTIONS="-Xmx1g"
Java -jar jconsole.jar&Picked up _Java_OPTIONS:-Xmx1g
それを行うには多くの方法があります:
メインJarをトリガーする別のJarファイルを作成することにより、できます。
または、jarを開始するバッチファイルを用意します。ただし、たとえばnetからダウンロードした場合、ユーザーはスクリプトの実行権限を設定する必要があることに注意してください
インストーラーをビルドします。 Macでは、Oracle Java Java 7、Apple Java 6 .appファイルをビルドします。必要な権限が設定されていないので、再配布することはできません。アプリファイルのdmgをビルドします。これは、配布に使用できます。
3番目の手法は、依存関係を適切にパッケージ化し、すべてのJVM引数などを設定できるため、最適です。