この章では、Java HotSpotTM 仮想マシンの性能特性に影響するコマンド行オプションと環境変数について説明します。特に注記しない限り、このドキュメントのすべての情報は Java HotSpot Client VM と Java HotSpot Server VM の両方に適用されます。Java プラットフォームのガベージコレクション (GC)、スレッド化、および性能に関する FAQ の詳細については、http://java.sun.com/docs/hotspot を参照してください。
Java HotSpot VM が認識する標準オプションについては、Java アプリケーション起動ツール (java ユーティリティ) のマニュアルページや http://java.sun.com/j2se/1.4/ja/docs/ja/tooldocs/solaris/java.html にあるオンラインドキュメントを参照してください。この章では、Java HotSpot VM が認識する非標準オプションについて説明します。
-X から始まるオプションは非標準であり (つまり、必ずしもすべての VM 実装でサポートされることが保証されていない)、Java 2 SDK の今後のリリースで予告なしに変更される可能性があります。
-XX オプションが正しく動作するためには特別なシステム条件があり、システム構成パラメータにアクセスできる特権が必要なため、一般的には使用しないことが推奨されます。このようなオプションも予告なしに変更される可能性があります。
Java HotSpot VM に関連する事項の詳細については、http://java.sun.com/j2se/1.4/ja/docs/ja/guide/vm/index.html にあるオンラインドキュメントを参照してください。
バージョン 1.3.0 より前では、Java 2 SDK (Solaris オペレーティング環境用) の製品リリースには Exact VM (EVM) という仮想マシン実装が付属していました。バージョン 1.3.0 以降では、Exact VM の代わりに Java HotSpot VM が付属しています。
Exact VM でサポートされていたオプションは、Java HotSpot VM では名前が変わったり、廃止されたりしています。次の表に、Java 2 SDK v 1.4.0 でサポートされている EVM オプションと同等な Java HotSpot VM オプションを示します。
EVM オプション |
説明 |
同等な Java HotSpot VM オプション |
---|---|---|
-Xt |
命令のトレース |
なし (廃止されたオプション) |
-Xtm |
メソッドのトレース |
なし (廃止されたオプション) |
-Xoss |
Java スタックの最大サイズ |
なし (Java HotSpot VM はネイティブのスタックと Java プログラミング言語のスタックを別々に持っていない。) |
-Xverifyheap |
ヒープの整合性を確認する。 |
-XX:+VerifyBeforeGC -XX:+VerifyAfterGC -XX:+VerifyTLAB -XX:+VerifyBeforeScavenge -XX:+VerifyAfterScavenge (すべてデバッグのみ) |
-Xmaxjitcodesize |
コンパイルされるコードの最大サイズ |
-Xmaxjitcodesize (以前は -Xmaxjitcodesize=32m、現在は -Xmaxjitcodesize32m ) |
-Xgenconfig |
ヒープを構成する。 |
(次の -Xgenconfig オプションを参照。) |
-Xoptimize |
JIT 最適化コンパイラを使用する。 |
-server |
-Xconcgc |
並行ガベージコレクタ (1.2.2_07+) を使用する。 |
なし (1.3、1.4 ではまだない。) |
Java HotSpot VM は現在、Exact VM ではサポートされていなかった次の -X オプションを認識します。
オプション |
説明 |
---|---|
-Xincgc |
Train GC を使用する。 |
-Xnoincgc |
Train GC を使用しない (デフォルト) |
-Xmaxf<Maximum> |
縮小を避けるための GC 後の空きヒープの最大パーセンテージ (デフォルトは 0.7) |
-Xminf<Minimum> |
拡大を避けるための GC 後の空きヒープの最小パーセンテージ (デフォルトは 0.4) |
-Xint |
インタープリタのみ |
-Xboundthreads |
ユーザレベルのスレッドをバインドする (1.4 ではデフォルト、1.3 ではデフォルトでない) |
-Xmn<Size> |
若い世代のサイズを設定する (1.4 のみ) |
Java HotSpot VM の若い世代は eden と 2 つのサイズが同じセミスペースから構成されますが、EVM の若い世代は 2 つのサイズが同じセミスペースから構成されます (eden なし)。コマンド -Xgenconfig:32m,64m,semispaces:128m,512m,markcompact は、それぞれ 32M バイトで始まり、64M バイトまで拡張可能な 64M バイトのセミスペースが 2 つあり、また、128M バイトで始まり、512M バイトまで拡張可能な古い世代があることを示しています。これは、(最大) サイズが 640M バイトのヒープを作成します。Java HotSpot VM では、これと同等なコマンドは「-Xms256m -Xmx640m -XX:NewSize=32m -XX:MaxNewSize=64m」です。見てわかるように、-Xgenconfig を使用するときには各世代のサイズを指定する必要がありましたが、Java HotSpot VM ではまず、ヒープの合計サイズを -Xms/-Xmx で設定し、その後に若い世代をその領域から切り出しています。
ほとんどの _JIT_ARGS 環境変数は内部的なデバッグ専用のオプションであり、Java HotSpot VM には対応するオプションがありません。問題を突き止めるためのもっとも簡単な方法は、最初に導入したときに不安定の原因となり、内部のテストグループによって使用された可能性がある最適化のフォームをいくつかオフにしてみることです。
_JIT_ARGS 環境 |
Java HotSpot VM オプション |
説明 |
---|---|---|
jit/jbe |
-client/- server |
jbe は 1.2 ベースのシステムにおける -Xoptimize と同じで、jit はデフォルト。1.2 の -Xoptimize (または jbe) の代わりに -server を使用する。 |
trace |
-XX:+PrintCompilation |
コンパイル時にメソッドをトレースする (1.3 ではデバッグのみ、1.4 では利用可能)。 |
V8/V9 |
-XX:+UseV8InstrsOnly |
これらのフラグを使用して強制的に指定する。両システムで自動的に判別 (Sparc/デバッグのみ)。 |
_JVM_ARGS 環境 |
Java HotSpot VM オプション |
説明 |
---|---|---|
bound_threads |
-Xboundthreads |
このオプションはすべてのスレッドが結合スレッドとして生成されるようにする (1.4 ではデフォルト、1.3 ではデフォルトでない)。 |
fixed_size_young_gen |
- Xmn<size> |
若い世代のリサイズを無効にする。Java HotSpot VM でこれを行うには、1.4 の場合、若い世代のサイズを定数に設定する。1.3 の場合、 -XX:NewSize=<size> -XX:MaxNewSize=<size> を使用する。 |
gc_stats |
-verbose:gc および/または -XX:+PrintGCDetails |
gc 統計収集の様々なフォームを有効にする。 |
ims_concurrent |
なし |
|
inline_instrs |
-XX:MaxInlineSize =<size> |
インライン化されるメソッド内のバイトコード命令の最大数を指定する整数。 |
inline_print |
-XX:+PrintInlining |
インライン化されるメソッドについてのメッセージを出力する (デバッグのみ)。 |
no_parallel_gc |
なし |
|
sync_final |
なし |
|
yield_interval |
-XX:DontYieldALotInterval =<ms> |
(デバッグのみ) 生成の間隔 (ミリ秒単位) |
monitor_order |
なし |
|
数字には、キロバイトを表す「k」または「K」、メガバイトを表す「m」または「M」、ギガバイトを表す「g」または「G」、およびテラバイトを表す「t」または「T」を付けることができます (たとえば、32k は 32768 と同じ)。 boolean 型のフラグをオンにするには -XX:+<option> を、オフにするには -XX:-<option> を使用します。
フラグとデフォルト |
説明 |
---|---|
-XX:-AllowUserSignalHandlers |
アプリケーションがシグナルハンドラをインストールしても (エラーまたは警告) メッセージを出さない。 |
-XX:AltStackSize=16384 |
代替シグナルスタックのサイズ (K バイト単位) |
-XX:+MaxFDLimit |
ファイル記述子の数を最大までに上げる。 |
-XX:MaxHeapFreeRatio=70 |
縮小を避けるための GC 後の空きヒープの最大パーセンテージ |
-XX:MinHeapFreeRatio=40 |
拡大を避けるための GC 後の空きヒープの最小パーセンテージ |
-XX:ReservedCodeCacheSize=32m |
コードキャッシュの予約サイズ (バイト単位) — コードキャッシュの最大サイズ |
-XX:+UseBoundThreads |
ユーザレベルのスレッドを LWP にバインドする (1.4 ではデフォルト)。 |
-XX:+UseLWPSynchronization |
スレッドではなく、LWP に基づく同期を使用する (1.4 ではデフォルト)。 |
-XX:+UseThreadPriorities |
ネイティブのスレッド優先順位を使用する。 |
-XXMaxPermSize=64m |
恒久的な世代のサイズ |
-XX:-CITime |
JIT コンパイラが費やした時間 (1.4 のみ) |
-XX:-PrintTenuringDistribution |
保有期間情報を出力する。 |
-XX:TargetSurvivorRatio=50 |
収集後に使用される survivor 空間の希望パーセンテージ |
-XX:-DisableExplicitGC |
System.gc() への呼び出しを無効にする。それでも VM は必要なときにガベージコレクションを実行する。 |
-XX:-OverrideDefaultLibthread |
Solaris 9 では、このオプションは必要ない。Solaris 8 では、J2SETM バージョン 1.3.1_02+ と 1.4+ が代替スレッドライブラリを使用するときにこのオプションを必要とする。このオプションは Solaris 8 より前のオペレーティング環境上では利用できない。 |
スレッドライブラリの詳細については、http://java.sun.com/docs/hotspot/threads/threads.html にあるスレッドに関するドキュメントを参照してください。
これらのフラグはアーキテクチャまたは OS ごとに異なります。「フラグとデフォルト」は「Sparc/-server」のデフォルトです。
フラグとデフォルト |
説明 |
---|---|
-XX:CompileThreshold=10000 |
コンパイル前のメソッド呼び出し/分岐の数 [10,000 — Sparc サーバ、1,000 — Sparc クライアント、1,500 — x86 クライアント] |
-XX:MaxNewSize=unlimited |
新しい世代の最大サイズ (バイト単位) [32M — Sparc、2.5M — x86 (1.3 の場合)、無制限 (1.4 の場合。これは現在では NewRatio が MaxNewSize を決定するため。)] |
-XX:NewRatio=2 |
新しい世代と古い世代のサイズの比率 [Sparc -server:2、Sparc -client: 4 (1.3 の場合)、8 (1.3.1+ の場合)、x86: 12] |
-XX:NewSize=2228224 |
新しい世代のデフォルトのサイズ (バイト単位) [Sparc 2.125M、x86: 640K] |
-XX:SurvivorRatio=64 |
eden 空間と survivor 空間のサイズの比率 [Solaris: 64] |
-XX:ThreadStackSize=512 |
スレッドスタックのサイズ (K バイト単位) (0 はデフォルトのスタックサイズを使用することを意味する。) [Solaris Sparc 32 ビット: 512、Solaris Sparc 64 ビット: 1024、Solaris x86: 256] |
-XX:+UseTLAB (J2SE 1.3 では XX:+UseTLE) |
スレッドローカルなオブジェクト割り当てを使用する [Sparc -server: 真、その他すべて: 偽] |
-XX:+UseISM |
http://java.sun.com/docs/hotspot/ism.html にある『Intimate Shared Memory』オンラインドキュメントを参照。 |