- 標準オプション
- 非標準オプション
- オプションのカテゴリと設定
- jcmd によるオプションの確認
- プラットフォーム固有のデフォルトチューニングフラグ
- プラットフォーム別のコンパイラ指定
- 主要なオプション
標準オプション
-help または -? で標準オプションが確認できる。
$ java -help
使用方法: java [-options] class [args...]
(クラスを実行する場合)
または java [-options] -jar jarfile [args...]
(jarファイルを実行する場合)
optionsには次のものがあります。
-d32 使用可能な場合は32ビットのデータ・モデルを使用する
-d64 使用可能な場合は64ビットのデータ・モデルを使用する
-server "server" VMを選択する場合
・・・
非標準オプション
-X とすると非標準のオプションが確認できる。
$ java -X
-Xmixed 混合モードの実行(デフォルト)
-Xint インタプリタ・モードの実行のみ
-Xbootclasspath:<:で区切られたディレクトリおよびzip/jarファイル>
ブートストラップのクラスとリソースの検索パスを設定する
-Xnoclassgc クラスのガベージ・コレクションを無効にする
-Xincgc 増分ガベージ・コレクションを有効にする
-Xloggc:<file> タイムスタンプが付いたファイルにGCステータスのログを記録する
-Xbatch バックグラウンドのコンパイルを無効にする
-Xms<size> Javaの初期ヒープ・サイズを設定する
-Xmx<size> Javaの最大ヒープ・サイズを設定する
・・・
オプションのカテゴリと設定
-serverのようなXが付かないものは標準オプション-Xで始まるものは非標準オプションで、全てのVM実装で有効とは限らなく、変更される可能性もある-XXで始まるものは非安定オプションで、予告なく変更される可能性がある
ON/OFF を切り替えるようなbool値のオプションは -XX:+<オプション> でオン、-XX:-<オプション> でオフのように指定する。例えば -XX:+PrintGCDetails のように。
値を設定するオプションの場合は -XX:<オプション>=<値> のように指定する。例えば -XX:MaxPermSize=256m のように。
jcmd によるオプションの確認
稼働中の特定のプロセスに対して、直接コマンドラインから指定されたオプションを確認するには以下のようにする。
$ jcmd <プロセスID> VM.command_line
<プロセスID>: VM Arguments: jvm_args: -Dfile.encoding=UTF-8 -XX:+UseConcMarkSweepGC ・・・ java_command: <unknown> java_class_path (initial): ・・・ Launcher Type: generic
コマンドライン引数で指定されたものに加え、JVMがプラットフォームに応じて自動的に設定したチューニングフラグを合わせて確認するには以下のようにする。
$ jcmd <プロセスID> VM.flags
プラットフォームに応じて自動設定されたチューニングフラグの設定も表示される。
<プロセスID>: -XX:CICompilerCount=3 -XX:+HeapDumpOnOutOfMemoryError -XX:InitialHeapSize=134217728 ・・・
例えば CICompilerCount はコンパイラタイプとCPU数に応じて自動設定されたもの。
デフォルト値を含めて、全てのチューニングフラグを表示するには -all オプションを付ける。
$ jcmd <プロセスID> VM.flags -all
つらつらと数百個表示される。
<プロセスID>:
[Global flags]
uintx AdaptiveSizeDecrementScaleFactor = 4 {product}
uintx AdaptiveSizeMajorGCDecayTimeScale = 10 {product}
uintx AdaptiveSizePausePolicy = 0 {product}
uintx AdaptiveSizePolicyCollectionCostMargin = 50 {product}
uintx AdaptiveSizePolicyInitializingSteps = 20 {product}
・・・
プラットフォーム固有のデフォルトチューニングフラグ
プラットフォーム固有のデフォルトのチューニングフラグを表示するには以下のようにする。
$ java -XX:+PrintFlagsFinal -version
診断用フラグ、実験的フラグ、商用機能フラグなど全部入りで表示するには以下のようにする。
$ java -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UnlockCommercialFeatures -XX:+PrintFlagsFinal -version
結果は大量に以下のように表示される。
[Global flags]
uintx AdaptiveSizeDecrementScaleFactor = 4 {product}
uintx AdaptiveSizeMajorGCDecayTimeScale = 10 {product}
uintx AdaptiveSizePausePolicy = 0 {product}
uintx AdaptiveSizePolicyCollectionCostMargin = 50 {product}
uintx AdaptiveSizePolicyInitializingSteps = 20 {product}
・・・
uintx InitialCodeCacheSize = 2555904 {pd product}
uintx InitialHeapSize := 134217728 {product}
uintx InitialRAMFraction = 64 {product}
uintx InitialSurvivorRatio = 8 {product}
uintx MaxHeapFreeRatio = 100 {manageable}
intx FenceInstruction = 0 {ARCH product}
bool IncrementalInline = true {C2 product}
intx InteriorEntryAlignment = 16 {C2 pd product}
bool LIRFillDelaySlots = false {C1 pd product}
bool PrintHeapAtGCExtended = false {product rw}
bool UseCompressedClassPointers := true {lp64_product}
bool UseCompressedOops := true {lp64_product}
:= はデフォルト値以外のプラットフォームに応じた値が設定されていることを示す。
コロンがない場合は対象のバージョンのJVMのデフォルト値。
右端のキーワードは以下の意味となる。
| 値 | 説明 |
|---|---|
| product | 一般的なフラグでオフィシャルサポートがある |
| product rw | 書き込み可能な内部フラグ |
| manageable | 書き込み可能な外部フラグ |
| C1 | Client JIT Compiler 固有のフラグ |
| C2 | Server JIT Compiler 固有のフラグ |
| pd | プラットフォーム依存のフラグ |
| lp64 | 64bit JVMに固有のフラグ |
| ARCH | CPUアーキテクチャに依存したフラグ |
| diagnostic | JVMデバッグ用の診断用 -XX:+UnlockDiagnosticVMOptions にて出力される |
| experimental | 実験的機能 -XX:+UnlockExperimentalVMOptions にて出力される |
| commercial | 商用機能で利用にはライセンスが必要 -XX:+UnlockCommercialFeatures にて出力される |
{pd product} はデフォルト値がプラットフォーム毎で異なるもの
{product} は全てのプラットフォームで共通のデフォルト値
{manageable} はjinfoコマンドなどにより実行時にフラグの値を変更可能
といった感じ。
-XX:+PrintFlagsInitial により、そもそもの初期値を表示することもできる。
プラットフォーム別のコンパイラ指定
-client と -server のオプション指定で、どのコンパイラ(通称 C1 / C2 コンパイラ)になるかは以下。
| PF | JVM | -client | -server | -d64 |
|---|---|---|---|---|
| Linux | 32bit VM | 32bit クライアントコンパイラ | 32bit サーバコンパイラ | エラー |
| Linux | 64bit VM | 64bit サーバコンパイラ | 64bit サーバコンパイラ | 64bit サーバコンパイラ |
| OS X | 64bit VM | 64bit サーバコンパイラ | 64bit サーバコンパイラ | 64bit サーバコンパイラ |
| Windows | 32bit VM | 32bit クライアントコンパイラ | 32bit サーバコンパイラ | エラー |
| Windows | 64bit VM | 64bit サーバコンパイラ | 64bit サーバコンパイラ | 64bit サーバコンパイラ |
オプション指定しない場合は以下のようにデフォルト設定される。
| PF | JVM | CPU | |
|---|---|---|---|
| Linux | 32bit VM | 1CPU | -client |
| Linux | 32bit VM | 2CPU~ | -server |
| Linux | 64bit VM | 任意 | -server |
| OS X | 64bit VM | 任意 | -server |
| Windows | 32bit VM | 任意 | -client |
| Windows | 64bit VM | 任意 | -server |
なお、Java8 からは、-server とともに指定できる-XX:+TieredCompilation による階層的コンパイルがデフォルトで有効となっている。
主要なオプション
については長くなりそうなので次回。