Hatena::ブログ(Diary)

#9 Backyard RSSフィード Twitter

2012年01月01日 正月休暇特集

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 が認識する非標準オプションを扱っています。

  • -X で始まるオプションは非標準 (全ての VM 実装でのサポートが保証されていない) であり、今後の JDK リリースで予告なしに変更される場合があります。
  • -XX で記述しているオプションは安定版ではなく気軽な利用は推奨できません。これらのオプションは予告なく変更されることがあります。

いくつかの有用な -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に例示しています。また管理可能フラグは no title を通じても設定可能です。

以下のオプションは大まかに 3 つのカテゴリに分けています。

振る舞いオプション
オプションとデフォルト値説明
-XX:-AllowUserSignalHandlersアプリケーションがシグナルハンドラをインストールする際に警告を出さない (Solaris, Linuxのみ)。
-XX:AltStackSize=16384代替シグナルスタックのサイズ (kB単位) を設定 (Solarisのみ)(5.0で削除)
-XX:-DisableExplicitGCアプリケーションによる System.gc() コールを無効化。JVM は必要に応じて GC を実行する。
-XX:+FailOverToOldVerifier新しい型チェッカーが失敗した時に古いベリファイアにフェールオーバーする (6で導入)。
-XX:+HandlePromotionFailure最も Young 世代のコレクションが生存オブジェクトの完全な昇進の保証を必要としない (1.4.2 update 11 で導入) [5.0 及びそれ以前: false]
-XX:+MaxFDLimitファイル記述子の最大数を増加 (Solarisのみ)。
-XX:PreBlockSpin=10-XX:+UseSpinning で使用するカウント変数をスピン。オペレーティングシステムのスレッド同期コードに入る前に最大スピンイテレーションを制御できるようにする (1.4.2で導入)。
-XX:-RelaxAccessControlCheckベリファイアによるアクセス制御チェックを緩和 (6で導入)。
-XX:+ScavengeBeforeFullGCFull GC の前に Young 世代 GC を実行する (1.4.1で導入)。
-XX:+UseAltSigsVM 内部シグナル SIGUSR1, SIGUSR2 の代わりに振替シグナルを使用する (1.3.1 update 9, 1.4.1で導入) (Solarisのみ)。
-XX:+UseBoundThreadsカーネルスレッドにユーザレベルスレッドをバインドする (Solarisのみ)。
-XX:-UseConcMarkSweepGCOld 世代に対して concurrent mark-sweep GC を使用する (1.4.1で導入)
-XX:+UseGCOverheadLimitOutOfMemory エラーがスローされる前に GC に費やされている VM 時間の割合を制限するポリシーを使用する (6で導入)。
-XX:+UseLWPSynchronizationスレッドベースの同期の代わりに Light Weight Process ベースの同期を使用する (1.4.0で導入) (Solarisのみ)。
-XX:-UseParallelGCYoung GC のために並列 GC を使用する (1.4.1で導入)。
-XX:-UseParallelOldGCFull GC のために並列 GC を使用する。-XX:+UseParallelGC を設定にすると自動的に有効となる (5.0 update 6で導入)
-XX:-UseSerialGC直列 GC を使用する (5.0で導入)。
-XX:-UseSpinningOS スレッド同期コードに入る前に Java モニタ上のネイティブスピンを有効にする (1.4.2と 5.0にのみ関連) [1.4.2マルチプロセッサ Windows:true]。
-XX:+UseTLABスレッドローカルなオブジェクトの割り当てを行う (1.4.0より前に UseTLE と知られ 1.4.0 で導入) [1.4.2 またはそれ以前, x86 または -client: false]
-XX:+UseSplitVerifierStackMapTable 属性を持つ新しい型チェッカーを使用する (5.0で導入) [5.0:false]。
-XX:+UseThreadPrioritiesネイティブスレッドの優先順位を使用する。
-XX:+UseVMInterruptibleIOOS_INTRPT に対して I/O 操作で EINTR を発生させる*1 (6で導入) (Solarisのみ)。
パフォーマンスオプション
オプションとデフォルト値説明
XX:+AggressiveOpts今後のリリースでデフォルトとなる予定のポイントパフォーマンスコンパイラ最適化をオンにします (5.0 update 6で導入)。
-XX:CompileThreshold=10000コンパイルを行うまでのメソッド呼び出し/分岐の回数。 [-client: 1,500]
-XX:LargePageSizeInBytes=4MJava ヒープに対して使用されるラージページのサイズを設定 (14.0 update 1 で導入)。[AMD64: 2m]
-XX:MaxHeapFreeRatio=70縮小を避けるための GC 後の空きヒープの最大パーセンテージ。
-XX:MaxNewSize=sizeNew 世代の最大サイズ (バイト単位)。1.4 より MaxNewSize は NewRatio の関数として計算される [1.3.1 SPARC:32m; 1.3.1 x86:2.5m]
-XX:MaxPermSize=64MPermanent 世代のサイズ。[5.0 およびそれ以降:64bit VM は 30% より大きくスケール; 1.4 AMD64:96M; 1.3.1 -client:32M]
-XX:MinHeapFreeRatio=40縮小を避けるための GC 後の空きヒープの最小パーセンテージ。
-XX:NewRatio=2New/Old 世代サイズの比率。 [SPARC -client:8; x86 -server:8; x86 -client:12] -client:4 (1.3), 8(1.3.1+), x86:12]
-XX:NewSize=2.125mNew 世代のデフォルトサイズ (バイト単位) [5.0およびそれ以降:64bit VM は 30% より大きくスケール; x86:1m; x86, 5.0およびそれ以前:640k]
-XX:ReservedCodeCacheSize=32M予約コードキャッシュサイズ (バイト単位) - 最大コードキャッシュサイズ [Solaris 64bit, AMD64 および -server x86:48m; 1.5.0_06 とそれ以前, Solaris 64bit および AMD64:1024m]
-XX:SurvivorRatio=8Eden/Survivor領域のサイズの比率 [Solaris AMD64:6; SPARC in 1.3.1:25; その他 Solaris プラットフォーム in 5.0 またはそれ以前:32]
-XX:TargetSurvivorRatio=50Young GC 後に使用される Survivor 領域の望ましい割合。
-XX:ThreadStackSize=512スレッドスタックサイズ (Kバイト単位)。(0はデフォルトスタックサイズを使用) [SPARC:512; Solaris x86:320 (5.0以前では 256); SPARC 64bit:1024; Linux AMD64:1024 (5.0以前は0); それ以外は0]
-XX:+UseBiasedLockingバイアスロックを有効にする。詳細についてはJava Tuning White Paper参照。(5.0 update 6 で導入) [5.0:false]
-XX:+UseFastAccessorMethodsGet<Primitive>Field の最適化版を使用。
-XX:-UseISM緊密共有メモリ (ISM) を使用する [Solaris以外のプラットフォームでは無効]。詳細は Intimate Shared Memory (ISM) 参照。
-XX:+UseLargePagesラージページメモリを使用する (5.0 update 5 で導入)。詳細は Java Support for Large Memory Pages 参照。
-XX:+UseMPSSヒープに対して w/4MB ページの複数ページサイズサポートを使用する。ISM の必要性を置き換えるためにこのオプションを使用しないで下さい (1.4.0 update 1 で導入, Solaris 9 以降が対象) [1.4.1 以前:false]
-XX:+UseStringCache共通的に割り当てられた文字列のキャッシュを有効。
-XX:AllocatePrefetchLines=1JIT コンパイルされたコードのプリフェッチ命令を使用して、最後のオブジェクト割り当て後にロードするためのキャッシュライン数。最後に割り当てられたオブジェクトが 1 インスタンスの場合のデフォルト値は 1、配列ならば 3。
-XX:AllocatePrefetchStyle=1プリフェッチ命令に対して生成されたコードのスタイル。0 - どのようなプリフェッチ命令も生成されない、1 - それぞれの割り当て後にプリフェッチ命令を実行、2 - プリフェッチ命令が実行された時、ゲートに TLAB 割り当てウォーターマークポインターを使用する。
-XX:+UseCompressedStrings純粋な ASCII として表現できる文字列に対して byte[] を使用する (Java 6 update 21 パフォーマンスリリースで導入)。
-XX:+OptimizeStringConcat文字列連結操作を可能な限り最適化する (Java 6 Update 20 で導入)。
デバッグオプション
オプションとデフォルト値説明
-XX:-CITimeJIT コンパイラで費やされた時間を出力 (1.4.0で導入)
-XX:ErrorFile=./hs_err_pid<pid>.logエラーが発生した時にエラーデータを保存するファイル (6で導入)。
-XX:-ExtendedDTraceProbesパフォーマンスに影響を与える DTrace Probes in HotSpot VM を有効にする (6で導入, Solaris のみ)。
-XX:HeapDumpPath=./java_pid<pid>.hprofヒープダンプのディレクトリまたはファイル名へのパス。管理可能 (1.4.2 update 12, 5.0 update 7 で導入)。
-XX:-HeapDumpOnOutOfMemoryErrorjava.lang.OutOfMemoryErrorのがスローされたときにファイルにヒープをダンプする。管理可能 (1.4.2u12, 5.0u7で導入)。
-XX:onError="<cmd args>; <cmd args>"致命的なエラーが発生した時にユーザー定義のコマンドを実行する (1.4.2u9で導入)。
-XX:OnOutOfMemoryError="<cmd args>; <cmd args>"最初に OutOfMemoryError がスローされたときにユーザー定義のコマンドを実行する (1.4.2u12, 6 で導入)。
-XX:-PrintClassHistogram[CTRL]+[BREAK] キーでクラスインスタンスのヒストグラムを出力。管理可能 (1.4.2で導入)。jmap - Memory Map コマンドは同等の機能を提供する。
-XX:-PrintConcurrentLocks[CTRL]+[BREAK] スレッドダンプで java.util.concurrent ロックを出力する。管理可能 (6で導入)。jstack - Stack Trace コマンドは同等の機能を提供する。
-XX:-PrintCommandLineFlagsコマンドラインに現れたフラグを出力する (5.0で導入)。
-XX:-PrintCompilationメソッドがコンパイルされた時にメッセージを出力。
-XX:-PrintGCガベージコレクションでメッセージを出力。管理可能
-XX:-PrintGCDetailsガベージコレクションで詳細を出力。管理可能 (1.4.0で導入)。
-XX:-PrintGCTimeStampsガベージコレクションでタイムスタンプを出力。管理可能 (1.4.0で導入) (プロセス起動時からの秒数で出力されるので使うなら -XX:+PrintGCDateStamps の方がお勧め)
-XX:-PrintTenuringDistributiontenuring (殿堂入り) 年齢情報を出力。
-XX:-TraceClassLoadingクラスのロードをトレース。
-XX:-TraceClassLoadingPreorder(ロードされていない) 参照によってロードされたすべてのクラスをトレース (1.4.2で導入)。
-XX:-TraceClassResolution定数プールの消散をトレース (1.4.2で導入)。
-XX:-TraceClassUnloadingクラスのアンロードをトレース。
-XX:-TraceLoaderConstraintsローダ制約の記録をトレース (6で導入)。
-XX:+PerfSaveDataToFile終了時に jvmstat のバイナリデータを保存。
-XX:ParallelGCThreads=Young および Old 並列 GC の GC スレッド数を設定。デフォルト値は JVM が動作しているプラットフォームによって異なる。
-XX:+UseCompressedOopsJava ヒープサイズが 32GB 以下で最適化された 64bit パフォーマンスを得るために圧縮ポインタ (64bit ポインタの代わりに 32bit オフセットとして表現されるオブジェクトの参照) の使用を有効にする。
-XX:+AlwaysPreTouchJVM 初期化中に Java ヒープをプレ touch する。ヒープ上の全ページはアプリケーション実行中に段階的に行われるのではなく、初期化中の需要ゼロ状態で行われる。
-XX:AllocatePrefetchDistance=オブジェクト割り当てに対するプリフェッチの距離を設定。新しいオブジェクトの値が書き込まれようとしているメモリは、最後に割り当てられたオブジェクトのアドレスからこの距離 (バイト) でキャッシュにプリフェッチされる。各 Java スレッドは自分の割り当てポインタを持っている。デフォルト値は JVM が実行中のプラットフォームによって異なる。
-XX:InlineSmallCode=事前コンパイルされたメソッドが、それから生成されたネイティブコードのサイズがこれより小さい場合にのみインライン展開する。デフォルト値は JVM が実行中のプラットフォームにより異なる。
-XX:MaxInlineSize=35インライン化されるメソッドの最大バイトコードサイズ。
-XX:FreqInlineSize=頻繁実行によってインライン化されるメソッドの最大バイトコードサイズ。デフォルト値は JVM が実行中のプラットフォームによって異なる。
-XX:LoopUnrollLimit=サーバコンパイラで、この値より小さい中間表現ノード数の場合にループ本体を展開する。サーバコンパイラで使用される制限は実際の値ではなくこの値の関数作用値。デフォルト値は JVM が実行されているプラットフォームにより異なる。
-XX:InitialTenuringThreshold=7並列 Young GC の適用 GC サイジングで使用するための初期 Tenuring しきい値を設定。Tenuring しきい値は Old または Tenuring 世代に昇格する前に Young GC でオブジェクトが生存した回数。
-XX:MaxTenuringThreshold=適応 GC サイジングで使用するための最大 Tenuring しきい値。現在の最大値は 15。デフォルト値は並列 GC で 15、CMS で 4。

メモ

原文に記載されていないオプションなど。

-XX:UseParNewGC並列 Young GC を使用。並列 Mark-Seep GC と併用可能。
-XX:-PrintHeapAtGCGC 前後の詳細なヒープ情報を出力。
-XX:-PrintGCDateStampsGC を 2012-01-01T00:00:00.000+0900 形式のタイムスタンプで出力。
-XX:-CMSIncrementalMode(未調査)
-XX:MaxGCPauseMillis=nnnGC時に停止する最大ミリ秒(未調査)

資料

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/kuromoyo/20120101/1325358083