Java 2 SDK 開発ガイド (Solaris 編)

Java HotSpot VM オプション

この章では、Java HotSpotTM 仮想マシンの性能特性に影響するコマンド行オプションと環境変数について説明します。特に注記しない限り、このドキュメントのすべての情報は Java HotSpot Client VM と Java HotSpot Server VM の両方に適用されます。Java プラットフォームのガベージコレクション (GC)、スレッド化、および性能に関する FAQ の詳細については、http://java.sun.com/docs/hotspot を参照してください。

この章は次の節からなります。

Java HotSpot VM オプションのカテゴリ

Java HotSpot VM が認識する標準オプションについては、Java アプリケーション起動ツール (java ユーティリティ) のマニュアルページや http://java.sun.com/j2se/1.4/ja/docs/ja/tooldocs/solaris/java.html にあるオンラインドキュメントを参照してください。この章では、Java HotSpot VM が認識する非標準オプションについて説明します。

Exact VM オプションと同等な Java HotSpot VM オプション

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 のみ) 

-Xgenconfig オプション

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_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 オプション

_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 

なし 

 

追加の Java HotSpot VM 引数

数字には、キロバイトを表す「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』オンラインドキュメントを参照。