Java HotSpot VM Options
以下 Java HotSpot VM Options の勝手翻訳と、追加で原文には載っていないオプションについて。Oracle JDK 6 を対象とした内容となっています。
このドキュメントは Java HotSpot 仮想マシンのパフォーマンス特性に影響を与える一般的なコマンドラインオプションと環境変数に関する情報を提供します。特に断りのない限りこのドキュメントのすべての情報は Java HotSpot Client VM と Java HotSpot Server VM の両方に適用されます。1.3.0 より古い JDK に Java HotSpot VM を移植したいユーザは Java HotSpot Equivalents of Exact VM Flags を参照して下さい。
Java HotSpot VM オプションのカテゴリ
Java HotSpot VM が認識する標準オプションは Windows, Solaris, Linux の Java アプリケーション起動リファレンスページで詳述しています。このドキュメントでは Java HotSpot VM が認識する非標準オプションを扱っています。
いくつかの有用な -XX オプション
デフォルト値の一覧は Java SE 6 for Solaris SPARC の -server 説明にあります。一部のオプションはアーキテクチャ/OS/JVM バージョンごとに異なる可能性があります。異なるデフォルト値を持つプラットフォームは説明に記載しています。
- ブール値のオプションは -XX:+<option> でオン、-XX:-<option> でオフとなります。
- 数値オプションは -XX:<option>=<number> で指定できます。数値は 'm' または 'M' でメガバイト、'k' または 'K' でキロバイト、'g' または 'G' でギガバイトを含むことができます (例えば 32k は 32768 と等価)。
- 文字列オプションは -XX:<option>=<string> で指定し、通常ファイルやパス、コマンドリストを指定します。
管理可能として記述されているフラグは JConsole と Java の管理インターフェース (com.sun.management.HotSpotDiagnosticMXBean API) を通じて動的に書き換え可能です。これは Monitoring and Managing Java SE 6 Platform Applications の図3に例示しています。また管理可能フラグは http://java.sun.com/javase/6/docs/technotes/tools/share/jinfo.html を通じても設定可能です。
以下のオプションは大まかに 3 つのカテゴリに分けています。
- 振る舞いオプションは VM の基本的な振る舞いを変更する。
- パフォーマンスチューニングは VM パフォーマンスを調整するために使われる。
- デバッグオプションは は一般的に VM 情報のトレース、印刷、出力を有効にする。
振る舞いオプション
オプションとデフォルト値 | 説明 |
---|---|
アプリケーションがシグナルハンドラをインストールする際に警告を出さない (Solaris, Linuxのみ)。 | |
代替シグナルスタックのサイズ (kB単位) を設定 (Solarisのみ)(5.0で削除) | |
アプリケーションによる System.gc() コールを無効化。JVM は必要に応じて GC を実行する。 | |
新しい型チェッカーが失敗した時に古いベリファイアにフェールオーバーする (6で導入)。 | |
最も Young 世代のコレクションが生存オブジェクトの完全な昇進の保証を必要としない (1.4.2 update 11 で導入) [5.0 及びそれ以前: false] | |
ファイル記述子の最大数を増加 (Solarisのみ)。 | |
-XX:+UseSpinning で使用するカウント変数をスピン。オペレーティングシステムのスレッド同期コードに入る前に最大スピンイテレーションを制御できるようにする (1.4.2で導入)。 | |
ベリファイアによるアクセス制御チェックを緩和 (6で導入)。 | |
Full GC の前に Young 世代 GC を実行する (1.4.1で導入)。 | |
VM 内部シグナル SIGUSR1, SIGUSR2 の代わりに振替シグナルを使用する (1.3.1 update 9, 1.4.1で導入) (Solarisのみ)。 | |
カーネルスレッドにユーザレベルスレッドをバインドする (Solarisのみ)。 | |
Old 世代に対して concurrent mark-sweep GC を使用する (1.4.1で導入) | |
OutOfMemory エラーがスローされる前に GC に費やされている VM 時間の割合を制限するポリシーを使用する (6で導入)。 | |
スレッドベースの同期の代わりに Light Weight Process ベースの同期を使用する (1.4.0で導入) (Solarisのみ)。 | |
Young GC のために並列 GC を使用する (1.4.1で導入)。 | |
Full GC のために並列 GC を使用する。-XX:+UseParallelGC を設定にすると自動的に有効となる (5.0 update 6で導入) | |
直列 GC を使用する (5.0で導入)。 | |
OS スレッド同期コードに入る前に Java モニタ上のネイティブスピンを有効にする (1.4.2と 5.0にのみ関連) [1.4.2マルチプロセッサ Windows:true]。 | |
スレッドローカルなオブジェクトの割り当てを行う (1.4.0より前に UseTLE と知られ 1.4.0 で導入) [1.4.2 またはそれ以前, x86 または -client: false] | |
StackMapTable 属性を持つ新しい型チェッカーを使用する (5.0で導入) [5.0:false]。 | |
ネイティブスレッドの優先順位を使用する。 | |
OS_INTRPT に対して I/O 操作で EINTR を発生させる*1 (6で導入) (Solarisのみ)。 |
パフォーマンスオプション
オプションとデフォルト値 | 説明 |
---|---|
今後のリリースでデフォルトとなる予定のポイントパフォーマンスコンパイラ最適化をオンにします (5.0 update 6で導入)。 | |
コンパイルを行うまでのメソッド呼び出し/分岐の回数。 [-client: 1,500] | |
Java ヒープに対して使用されるラージページのサイズを設定 (14.0 update 1 で導入)。[AMD64: 2m] | |
縮小を避けるための GC 後の空きヒープの最大パーセンテージ。 | |
New 世代の最大サイズ (バイト単位)。1.4 より MaxNewSize は NewRatio の関数として計算される [1.3.1 SPARC:32m; 1.3.1 x86:2.5m] | |
Permanent 世代のサイズ。[5.0 およびそれ以降:64bit VM は 30% より大きくスケール; 1.4 AMD64:96M; 1.3.1 -client:32M] | |
縮小を避けるための GC 後の空きヒープの最小パーセンテージ。 | |
New/Old 世代サイズの比率。 [SPARC -client:8; x86 -server:8; x86 -client:12] -client:4 (1.3), 8(1.3.1+), x86:12] | |
New 世代のデフォルトサイズ (バイト単位) [5.0およびそれ以降:64bit VM は 30% より大きくスケール; x86:1m; x86, 5.0およびそれ以前:640k] | |
予約コードキャッシュサイズ (バイト単位) - 最大コードキャッシュサイズ [Solaris 64bit, AMD64 および -server x86:48m; 1.5.0_06 とそれ以前, Solaris 64bit および AMD64:1024m] | |
Eden/Survivor領域のサイズの比率 [Solaris AMD64:6; SPARC in 1.3.1:25; その他 Solaris プラットフォーム in 5.0 またはそれ以前:32] | |
Young GC 後に使用される Survivor 領域の望ましい割合。 | |
スレッドスタックサイズ (Kバイト単位)。(0はデフォルトスタックサイズを使用) [SPARC:512; Solaris x86:320 (5.0以前では 256); SPARC 64bit:1024; Linux AMD64:1024 (5.0以前は0); それ以外は0] | |
バイアスロックを有効にする。詳細についてはJava Tuning White Paper参照。(5.0 update 6 で導入) [5.0:false] | |
Get<Primitive>Field の最適化版を使用。 | |
緊密共有メモリ (ISM) を使用する [Solaris以外のプラットフォームでは無効]。詳細は http://www.oracle.com/technetwork/java/ism-139376.html 参照。 | |
ラージページメモリを使用する (5.0 update 5 で導入)。詳細は Java Support for Large Memory Pages 参照。 | |
ヒープに対して w/4MB ページの複数ページサイズサポートを使用する。ISM の必要性を置き換えるためにこのオプションを使用しないで下さい (1.4.0 update 1 で導入, Solaris 9 以降が対象) [1.4.1 以前:false] | |
共通的に割り当てられた文字列のキャッシュを有効。 | |
JIT コンパイルされたコードのプリフェッチ命令を使用して、最後のオブジェクト割り当て後にロードするためのキャッシュライン数。最後に割り当てられたオブジェクトが 1 インスタンスの場合のデフォルト値は 1、配列ならば 3。 | |
プリフェッチ命令に対して生成されたコードのスタイル。0 - どのようなプリフェッチ命令も生成されない、1 - それぞれの割り当て後にプリフェッチ命令を実行、2 - プリフェッチ命令が実行された時、ゲートに TLAB 割り当てウォーターマークポインターを使用する。 | |
純粋な ASCII として表現できる文字列に対して byte[] を使用する (Java 6 update 21 パフォーマンスリリースで導入)。 | |
文字列連結操作を可能な限り最適化する (Java 6 Update 20 で導入)。 |
デバッグオプション
オプションとデフォルト値 | 説明 |
---|---|
JIT コンパイラで費やされた時間を出力 (1.4.0で導入) | |
エラーが発生した時にエラーデータを保存するファイル (6で導入)。 | |
パフォーマンスに影響を与える DTrace Probes in HotSpot VM を有効にする (6で導入, Solaris のみ)。 | |
ヒープダンプのディレクトリまたはファイル名へのパス。管理可能 (1.4.2 update 12, 5.0 update 7 で導入)。 | |
java.lang.OutOfMemoryErrorのがスローされたときにファイルにヒープをダンプする。管理可能 (1.4.2u12, 5.0u7で導入)。 | |
致命的なエラーが発生した時にユーザー定義のコマンドを実行する (1.4.2u9で導入)。 | |
最初に OutOfMemoryError がスローされたときにユーザー定義のコマンドを実行する (1.4.2u12, 6 で導入)。 | |
[CTRL]+[BREAK] キーでクラスインスタンスのヒストグラムを出力。管理可能 (1.4.2で導入)。jmap - Memory Map コマンドは同等の機能を提供する。 | |
[CTRL]+[BREAK] スレッドダンプで java.util.concurrent ロックを出力する。管理可能 (6で導入)。jstack - Stack Trace コマンドは同等の機能を提供する。 | |
コマンドラインに現れたフラグを出力する (5.0で導入)。 | |
メソッドがコンパイルされた時にメッセージを出力。 | |
ガベージコレクションでメッセージを出力。管理可能。 | |
ガベージコレクションで詳細を出力。管理可能 (1.4.0で導入)。 | |
ガベージコレクションでタイムスタンプを出力。管理可能 (1.4.0で導入) (プロセス起動時からの秒数で出力されるので使うなら -XX:+PrintGCDateStamps の方がお勧め) | |
tenuring (殿堂入り) 年齢情報を出力。 | |
クラスのロードをトレース。 | |
(ロードされていない) 参照によってロードされたすべてのクラスをトレース (1.4.2で導入)。 | |
定数プールの消散をトレース (1.4.2で導入)。 | |
クラスのアンロードをトレース。 | |
ローダ制約の記録をトレース (6で導入)。 | |
終了時に jvmstat のバイナリデータを保存。 | |
Young および Old 並列 GC の GC スレッド数を設定。デフォルト値は JVM が動作しているプラットフォームによって異なる。 | |
Java ヒープサイズが 32GB 以下で最適化された 64bit パフォーマンスを得るために圧縮ポインタ (64bit ポインタの代わりに 32bit オフセットとして表現されるオブジェクトの参照) の使用を有効にする。 | |
JVM 初期化中に Java ヒープをプレ touch する。ヒープ上の全ページはアプリケーション実行中に段階的に行われるのではなく、初期化中の需要ゼロ状態で行われる。 | |
オブジェクト割り当てに対するプリフェッチの距離を設定。新しいオブジェクトの値が書き込まれようとしているメモリは、最後に割り当てられたオブジェクトのアドレスからこの距離 (バイト) でキャッシュにプリフェッチされる。各 Java スレッドは自分の割り当てポインタを持っている。デフォルト値は JVM が実行中のプラットフォームによって異なる。 | |
事前コンパイルされたメソッドが、それから生成されたネイティブコードのサイズがこれより小さい場合にのみインライン展開する。デフォルト値は JVM が実行中のプラットフォームにより異なる。 | |
インライン化されるメソッドの最大バイトコードサイズ。 | |
頻繁実行によってインライン化されるメソッドの最大バイトコードサイズ。デフォルト値は JVM が実行中のプラットフォームによって異なる。 | |
サーバコンパイラで、この値より小さい中間表現ノード数の場合にループ本体を展開する。サーバコンパイラで使用される制限は実際の値ではなくこの値の関数作用値。デフォルト値は JVM が実行されているプラットフォームにより異なる。 | |
並列 Young GC の適用 GC サイジングで使用するための初期 Tenuring しきい値を設定。Tenuring しきい値は Old または Tenuring 世代に昇格する前に Young GC でオブジェクトが生存した回数。 | |
適応 GC サイジングで使用するための最大 Tenuring しきい値。現在の最大値は 15。デフォルト値は並列 GC で 15、CMS で 4。 |
メモ
原文に記載されていないオプションなど。
並列 Young GC を使用。並列 Mark-Seep GC と併用可能。 | |
GC 前後の詳細なヒープ情報を出力。 | |
GC を 2012-01-01T00:00:00.000+0900 形式のタイムスタンプで出力。 | |
(未調査) | |
GC時に停止する最大ミリ秒(未調査) |