Javaアプリケーションを起動します。
java [options] classname [args]
java [options] -jar filename [args]
スペースで区切ったコマンド行オプション。「オプション」を参照してください。
起動するクラスの名前。
呼び出されるJavaアーカイブ(JAR)ファイルの名前。-jar
オプションと一緒にのみ使用されます。
スペースで区切られたmain()
メソッドに渡される引数。
java
コマンドはJavaアプリケーションを起動します。これは、Java Runtime Environment (JRE)を起動し、指定されたクラスをロードし、そのクラスのmain()
メソッドを呼び出すことによって行われます。このメソッドは、publicおよびstaticとして宣言する必要があり、値を返すことができず、String
配列をパラメータとして受け付ける必要があります。メソッド宣言の形式は次のとおりです。
public static void main(String[] args)
java
コマンドは、main()
メソッドがあるか、javafx.application.Application
を拡張するクラスをロードすることによって、JavaFXアプリケーションを起動するために使用できます。後者の場合、ランチャはApplication
クラスのインスタンスを構築し、そのinit()
メソッドを呼び出し、次にstart(javafx.stage.Stage)
メソッドを呼び出します。
デフォルトでは、java
コマンドのオプションでない最初の引数は呼び出されるクラスの完全修飾名です。-jar
オプションを指定した場合、その引数はアプリケーションのクラス・ファイルとリソース・ファイルを含むJARファイルの名前です。起動クラスはそのソース・コードのMain-Class
マニフェスト・ヘッダーによって示される必要があります。
JREは、ブートストラップ・クラス・パス、インストールされた拡張機能およびユーザー・クラス・パスの3つの一連の場所から起動クラス(およびアプリケーションで使用されている他のクラス)を検索します。
クラス・ファイル名またはJARファイル名の後にある引数は、main()
メソッドに渡されます。
java
コマンドは、幅広いオプションをサポートしており、次のカテゴリに分けられます。
標準オプションは、Java仮想マシン(JVM)のすべての実装でサポートされることが保証されています。それらは、JREのバージョンの確認、クラス・パスの設定、詳細出力の有効化などの一般的なアクションに使用します。
非標準オプションはJava HotSpot仮想マシンに固有の汎用オプションであるため、すべてのJVM実装でサポートされる保証はなく、変更されることがあります。これらのオプションは-X
から始まります。
拡張オプションは不用意に使用することはお薦めしません。これらは、特定のシステム要件があり、システム構成パラメータに特権付きアクセスを必要とするようなJava HotSpot仮想マシンの操作の特定の領域のチューニングに使用するための開発者用オプションです。それらは、すべてのJVM実装でサポートされている保証はなく、変更されることがあります。拡張オプションは-XX
から始まります。
最新のリリースで非推奨にされたか、削除されたオプションを追跡するには、ドキュメントの最後の「非推奨のオプションと削除されたオプション」というセクションがあります。
ブール・オプションは、デフォルトで無効にされている機能を有効にするか、デフォルトで有効にされている機能を無効にするために使用します。それらのオプションではパラメータは必要ありません。ブール-XX
オプションは、プラス記号を使用して有効にし(-XX:+
OptionName)、マイナス記号を使用して無効にします(-XX:-
OptionName)。
引数を必要とするオプションの場合、引数とオプション名はスペース、コロン(:)または等号(=)で区切るか、またはオプションの後に直接引数を続けることもできます(正確な構文はオプションごとに異なります)。バイト単位のサイズを指定する必要がある場合は、接尾辞を使用しないか、またはキロバイト(KB)の場合に接尾辞k
またはK
、メガバイト(MB)の場合にm
またはM
、ギガバイト(GB)の場合にg
またはG
を使用できます。たとえば、サイズを8Gバイトに設定するには、引数として、8g
、8192m
、8388608k
または8589934592
と指定できます。パーセンテージを指定する必要がある場合は、0から1の数値を使用します(たとえば、25%の場合0.25
と指定する)。
これらは、JVMのすべての実装でサポートされるもっとも一般的に使われるオプションです。
指定したネイティブ・エージェント・ライブラリをロードします。ライブラリ名の後に、ライブラリに固有のオプションのカンマ区切りのリストを使用できます。
オプション-agentlib:foo
が指定された場合、JVMはlibfoo.so
という名前のライブラリを、LD_LIBRARY_PATH
システム変数(OS Xではこの変数はDYLD_LIBRARY_PATH
)で指定された場所にロードしようとします。
次の例では、ヒープ・プロファイリング・ツール(HPROF)ライブラリをロードし、スタックの深さ3で、サンプルCPU情報を20ミリ秒おきに取得する方法を示しています。
-agentlib:hprof=cpu=samples,interval=20,depth=3
次の例では、ava Debug Wire Protocol (JDWP)ライブラリをロードし、ポート8000でソケット接続をリスニングし、メイン・クラスのロード前にJVMを一時停止する方法を示しています。
-agentlib:jdwp=transport=dt_socket,server=y,address=8000
ネイティブ・エージェント・ライブラリの詳細は、次を参照してください。
http://docs.oracle.com/javase/jp/8/api/java/lang/instrument/package-summary.html
のjava.lang.instrument
パッケージの説明
http://docs.oracle.com/javase/jp/8/platform/jvmti/jvmti.html#starting
のJVM Tools Interfaceガイドの「エージェントのコマンド行オプション」
絶対パス名で指定されたネイティブ・エージェント・ライブラリをロードします。このオプションは-agentlib
と同等ですが、ライブラリのフル・パスとファイル名を使用します。
Java HotSpot Client VMを選択します。Java SE Development Kit (JDK)の64ビット・バージョンは現在、このオプションを無視し、かわりにServer VMを使用します。
デフォルトのJVMの選択については、次のServer-Classマシンの検出に関するページを参照してください。http://docs.oracle.com/javase/jp/8/technotes/guides/vm/server-class.html
システム・プロパティの値を設定します。property変数はプロパティの名前を表すスペースなしの文字列です。value変数はプロパティの値を表す文字列です。valueがスペースのある文字列の場合、それを引用符で囲みます(-Dfoo="foo bar"
など)。
32ビット環境でアプリケーションを実行します。32ビット環境がインストールされていないかサポートされていない場合は、エラーが報告されます。デフォルトでは、64ビット・システムを使用していないかぎり、アプリケーションは32ビット環境で実行されます。
64ビット環境でアプリケーションを実行します。64ビット環境がインストールされていないかサポートされていない場合は、エラーが報告されます。デフォルトでは、64ビット・システムを使用していないかぎり、アプリケーションは32ビット環境で実行されます。
現在のところ、Java HotSpot Server VMだけが64ビットの操作をサポートしており、-d64
を使用すると-server
オプションが暗黙的に有効になります。-d64
使用時には-client
オプションは無視されます。この仕様は、将来のリリースでは変更になる可能性があります。
アサーションを無効にします。デフォルトでは、すべてのパッケージとクラスでアサーションは無効になっています。
引数なしで、-disableassertions
(-da
)は、すべてのパッケージとクラスでアサーションを無効にします。...で終わるpackagename
引数を指定すると、スイッチは指定したパッケージとサブパッケージ内でアサーションを無効にします。引数が...
のみの場合、スイッチは現在の作業ディレクトリにある名前のないパッケージ内でアサーションを無効にします。classname引数を指定すると、スイッチは指定したクラス内でアサーションを無効にします。
-disableassertions
(-da
)オプションは、すべてのクラス・ローダーおよびシステム・クラス(クラス・ローダーを持たない)に適用されます。このルールには1つの例外があります。引数なしでオプションが指定された場合、システム・クラスには適用されません。これにより、システム・クラスを除くすべてのクラスでアサーションを簡単に無効にできます。-disablesystemassertions
オプションは、すべてのシステム・クラスでアサーションを無効にできます。
特定のパッケージまたはクラスでアサーションを明示的に有効にするには、-enableassertions
(-ea
)オプションを使用します。両方のオプションを同時に使用することはできません。たとえば、com.wombat.fruitbat
パッケージ(およびすべてのサブパッケージ)内のアサーションを有効にし、com.wombat.fruitbat.Brickbat
クラス内のアサーションを無効にして、MyClass
アプリケーションを実行するには、次のコマンドを使用します。
java -ea:com.wombat.fruitbat... -da:com.wombat.fruitbat.Brickbat MyClass
すべてのシステム・クラス内でアサーションを無効にします。
アサーションを有効にします。デフォルトでは、すべてのパッケージとクラスでアサーションは無効になっています。
引数なしで、-enableassertions
(-ea
)は、すべてのパッケージとクラスでアサーションを有効にします。...で終わるpackagename
引数を指定すると、スイッチは指定したパッケージとすべてのサブパッケージ内でアサーションを有効にします。引数が...
のみの場合、スイッチは現在の作業ディレクトリにある名前のないパッケージ内でアサーションを有効にします。classname引数を指定すると、スイッチは指定したクラス内でアサーションを有効にします。
-enableassertions
(-ea
)オプションは、すべてのクラス・ローダーおよびシステム・クラス(クラス・ローダーを持たない)に適用されます。このルールには1つの例外があります。引数なしでオプションが指定された場合、システム・クラスには適用されません。これにより、システム・クラスを除くすべてのクラスでアサーションを簡単に有効にできます。-enablesystemassertions
オプションは、すべてのシステム・クラスでアサーションを有効にするために個別のスイッチを提供します。
特定のパッケージまたはクラスでアサーションを明示的に無効にするには、-disableassertions
(-da
)オプションを使用します。単一のコマンドにこれらのスイッチのインスタンスを複数指定した場合は、指定したスイッチが順番に処理されてからクラスがロードされます。たとえば、com.wombat.fruitbat
パッケージ(およびすべてのサブパッケージ)内でのみアサーションを有効にし、com.wombat.fruitbat.Brickbat
クラス内で無効にして、MyClass
アプリケーションを実行するには、次のコマンドを使用します。
java -ea:com.wombat.fruitbat... -da:com.wombat.fruitbat.Brickbat MyClass
すべてのシステム・クラス内でアサーションを有効にします。
実際にJVMを実行せずに、java
コマンドの使用情報を表示します。
JARファイルにカプセル化されたプログラムを実行します。filename引数は、アプリケーションの開始位置として機能するpublic static void main(String[] args)
メソッドによってクラスを定義する、Main-Class:
classnameの形式の行を含むマニフェストのあるJARファイルの名前です。
-jar
オプションを使用すると、指定したJARファイルがすべてのユーザー・クラスのソースになり、他のクラス・パスの設定は無視されます。
JARファイルの詳細は、次のリソースを参照してください。
http://docs.oracle.com/javase/jp/8/technotes/guides/jar/index.html
のJava Archive (JAR)ファイルのガイド
次のJARファイルへのプログラムのパッケージ化に関するレッスン
http://docs.oracle.com/javase/tutorial/deployment/jar/index.html
指定したJavaプログラミング言語エージェントをロードします。Javaアプリケーションの計測の詳細については、Java APIドキュメントのjava.lang.instrument
パッケージの説明(http://docs.oracle.com/javase/jp/8/api/java/lang/instrument/package-summary.html
)を参照してください。
ユーザーのプライベートJREをバージョン検索に含めます。
ユーザーのプライベートJREをバージョン検索から除外します。
Java HotSpot Server VMを選択します。JDKの64ビット・バージョンはServer VMのみをサポートしているため、その場合のオプションは暗黙的です。
デフォルトのJVMの選択については、次のServer-Classマシンの検出に関するページを参照してください。http://docs.oracle.com/javase/jp/8/technotes/guides/vm/server-class.html
バージョン情報を表示してアプリケーションの実行を続行します。このオプションは、-version
オプションと同等ですが、後者はJVMにバージョン情報の表示後終了するように指示する点が異なります。
imgnameに指定された画像を含むスプラッシュ画面を表示します。たとえば、アプリケーションの起動時に、images
ディレクトリのsplash.gif
ファイルを表示するには、次のオプションを使用します。
-splash:images/splash.gif
ロードされる各クラスに関する情報を表示します。
各ガベージ・コレクション(GC)イベントに関する情報を表示します。
ネイティブ・メソッドおよびその他のJava Native Interface (JNI)アクティビティの使用に関する情報を表示します。
バージョン情報を表示して終了します。このオプションは、-showversion
オプションと同等ですが、後者はJVMにバージョン情報の表示後終了するように指示する点が異なります。
アプリケーションの実行に使用するリリース・バージョンを指定します。呼び出されたjava
コマンドのバージョンがこの指定内容を満たさず、かつ適切な実装がシステム上で見つかった場合は、その適切な実装が使用されます。
release引数は、正確なバージョン文字列か、バージョン文字列と範囲のスペースで区切られたリストのいずれかで指定します。バージョン文字列とは形式1.
x.0_
u (ここでxはメジャー・バージョン番号で、uは更新バージョン番号)でのバージョン番号の開発者による指定です。バージョン範囲はバージョン番号とそれに続くこのバージョン以降を示すプラス記号(+
)か、または一致する接頭辞を持つバージョン文字列を示すバージョン文字列とその後のアスタリスク(*
) から構成されます。バージョン文字列とバージョン範囲は、論理ORの組合わせでスペースを使用して組み合わせるか、2つのバージョン文字列/範囲の論理AND
の組合わせでアンパサンド(&)を使用して組み合わせることができます。たとえば、クラスまたはJARファイルの実行に、JRE 6u13 (1.6.0_13)または6u10 (1.6.0_10)から始まる任意のJRE 6が必要な場合、次のように指定します。
-version:"1.6.0_13 1.6* & 1.6.0_10+"
疑問符は、releaseパラメータにスペースがある場合にのみ必要です。
JARファイルの場合は、バージョン要件をコマンド行に指定するよりも、JARファイルのマニフェスト内に指定することが推奨されています。
これらのオプションは、Java HotSpot仮想マシンに固有の汎用オプションです。
使用可能なすべての-X
オプションのヘルプを表示します。
バックグラウンド・コンパイルを無効にします。デフォルトで、JVMは、メソッドをバックグラウンド・タスクとしてコンパイルし、バックグラウンド・コンパイルが終了するまでインタプリタ・モードでメソッドを実行します。-Xbatch
フラグは、バックグラウンド・コンパイルを無効にするため、すべてのメソッドのコンパイルが完了するまでフォアグラウンド・タスクとして処理されます。
このオプションは-XX:-BackgroundCompilation
と同等です。
ブート・クラス・ファイルを探すディレクトリ、JARファイル、およびZIPアーカイブをコロン(:)で区切ったリストで指定します。それらが、JDKに含まれるブート・クラス・ファイルの代わりに使用されます。
rt.jar
内のクラスをオーバーライドするためにこのオプションを使用するアプリケーションは配備しないでください。これはJRE バイナリ・コード・ライセンス違反になります。
ディレクトリ、JARファイル、およびZIPアーカイブをコロン(:)で区切ったリストで指定します。これらはデフォルトのブートストラップ・クラス・パスの後に追加されます。
rt.jar
内のクラスをオーバーライドするためにこのオプションを使用するアプリケーションは配備しないでください。これはJRE バイナリ・コード・ライセンス違反になります。
ディレクトリ、JARファイル、およびZIPアーカイブをコロン(:)で区切ったリストで指定します。これらはデフォルトのブートストラップ・クラス・パスの前に追加されます。
rt.jar
内のクラスをオーバーライドするためにこのオプションを使用するアプリケーションは配備しないでください。これはJRE バイナリ・コード・ライセンス違反になります。
Java Native Interface (JNI)機能に対して追加チェックを行います。具体的には、それはJNI要求を処理する前に、JNI関数に渡されるパラメータと、実行時環境データを検証します。無効なデータが見つかった場合は、ネイティブ・コードに問題があることを示しており、その場合に、JVMは回復不能なエラーを発生して終了します。このオプションを使用すると、パフォーマンス低下が予想されます。
最初の呼出しで、メソッドのコンパイルを強制的に実行します。デフォルトで、クライアントVM (-client
)は1,000回の解析対象メソッドの呼出しを実行し、サーバーVM (-server
)は10,000回の解析対象メソッドの呼出しを実行して、効率的なコンパイルのための情報を収集します。-Xcomp
オプションを指定すると、解析対象メソッドの呼出しを無効にするため、効率性と引き換えにコンパイルのパフォーマンスが向上します。
-XX:CompileThreshold
オプションを使用して、コンパイル前の解析対象メソッドの呼出し数を変更することもできます。
何も行いません。下位互換性を維持するために提供されています。
追加の診断メッセージを表示します。
クラスファイル形式の仕様への厳密な準拠を適用するクラスファイル形式の厳密なチェックを有効にします。将来のリリースでは、より厳密なチェックがデフォルトになるため、新しいコードを開発するときにはこのフラグを使用することをお薦めします。
インタプリタ専用モードでアプリケーションを実行します。ネイティブ・コードへのコンパイルは無効になり、すべてのバイト・コードがインタプリタによって実行されます。Just-In-Time (JIT)コンパイラが提供するパフォーマンス上の利点は、このモードでは実現されません。
-version
オプションよりも詳しいJVMバージョン情報を表示して、終了します。
ロギングのため、詳細GCイベント情報をリダイレクトするファイルを設定します。このファイルに書き込まれる情報は、ロギングされた各イベントの前の最初のGCイベントから経過した時間での-verbose:gc
の出力と似ています。同じjava
コマンドで両方が指定された場合に、-Xloggc
オプションは、-verbose:gc
をオーバーライドします。
例:
-Xloggc:garbage-collection.log
JITでコンパイルされたコードの最大コード・キャッシュ・サイズ(バイト単位)を指定します。キロバイトを指定するには文字k
またはK
、メガバイトを指定するには文字m
またはM
、ギガバイトを指定するには文字g
またはG
を付けます。デフォルトの最大コード・キャッシュ・サイズは240MBです。オプション-XX:-TieredCompilation
を使用して階層化コンパイルを無効にした場合、デフォルトのサイズは48MBです。
-Xmaxjitcodesize=240m
このオプションは-XX:ReservedCodeCacheSize
と同等です。
ネイティブ・コードにコンパイルされるホット・メソッドを除くすべてのバイトコードをインタプリタによって実行します。
Young世代(ナーサリ)のヒープの初期および最大サイズ(バイト単位)を設定します。キロバイトを指定するには文字k
またはK
、メガバイトを指定するには文字m
またはM
、ギガバイトを指定するには文字g
またはG
を付けます。
ヒープのYoung世代領域は新しいオブジェクトに使用されます。この領域では他の領域よりも頻繁にGCが実行されます。Young世代のサイズが小さすぎる場合は、大量のマイナー・ガベージ・コレクションが実行されます。そのサイズが大きすぎる場合は、完全ガベージ・コレクションのみが実行されますが、これは完了までに長い時間がかかることがあります。Oracleでは、Young世代のサイズをヒープ・サイズ全体の半分から4分の1の間に維持することをお薦めします。
次の例では、様々な単位を使用して、Young世代の初期および最大サイズを256Mバイトに設定する方法を示します。
-Xmn256m -Xmn262144k -Xmn268435456
Young世代のヒープの初期サイズと最大サイズの両方を設定する-Xmn
オプションの代わりに、-XX:NewSize
を使用して、初期サイズを設定し、-XX:MaxNewSize
を使用して、最大サイズを設定できます。
ヒープの初期サイズ(バイト単位)を設定します。この値は、1024の倍数で1Mバイトより大きくなければなりません。キロバイトを指定するには文字k
またはK
、メガバイトを指定するには文字m
またはM
、ギガバイトを指定するには文字g
またはG
を付けます。
次の例では、様々な単位を使用して、割り当てられたメモリーのサイズを6Mバイトに設定する方法を示します。
-Xms6291456 -Xms6144k -Xms6m
このオプションを設定しない場合、初期サイズは、Old世代とYoung世代に割り当てられたサイズの合計として設定されます。Young世代のヒープの初期サイズは、-Xmn
オプションまたは-XX:NewSize
オプションを使用して設定できます。
メモリー割当てプールの最大サイズ(バイト単位)を指定します。この値は、1024の倍数で、2Mバイトより大きくなければなりません。キロバイトを指定するには文字k
またはK
、メガバイトを指定するには文字m
またはM
、ギガバイトを指定するには文字g
またはG
を付けます。デフォルト値は、実行時にシステムの設定に基づいて選択されます。サーバー配備の場合、-Xms
と-Xmx
が同一の値に設定されていることがよくあります。『Java SE HotSpot Virtual Machineガベージ・コレクション・チューニング・ガイド』(http://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/index.html
)のエルゴノミクスに関する項を参照してください。
次の例では、様々な単位を使用して、割り当てられたメモリーの最大許容サイズを80Mバイトに設定する方法を示します。
-Xmx83886080 -Xmx81920k -Xmx80m
-Xmx
オプションは-XX:MaxHeapSize
と同等です。
クラスのガベージ・コレクション(GC)を無効にします。これによりいくらかのGC時間が節約され、アプリケーション実行時の割込みが短くなります。
起動時に-Xnoclassgc
を指定すると、GC時にアプリケーションのクラス・オブジェクトがそのままの状態にされ、常に有効であるとみなされます。これにより、多くのメモリーが永続的に占有されることになるため、慎重に使用しないと、メモリー不足の例外がスローされます。
実行中のプログラムのプロファイルを生成し、プロファイル・データを標準出力に出力します。このオプションは、プログラム開発で役立つユーティリティとして提供されており、本番稼動システムでの使用を目的としたものではありません。
JVMによるオペレーティング・システム・シグナルの使用を減らします。
シャットダウン・フックにより、JVMが突然終了した場合でも、シャットダウン時にユーザー・クリーン・アップコード(データベース接続のクローズなど)を実行して、Javaアプリケーションの正常なシャットダウンができるようになりました。
JVMは、シグナルをキャッチすることによって、異常終了のためのシャットダウン・フックを実装します。JVMは、SIGHUP
、SIGINT
、およびSIGTERM
を使用して、シャットダウン・フックの実行を開始します。
JVMは、デバッグ用のスレッド・スタックをダンプする機能を実現するためにも、同様のメカニズムを使用します。JVMは、スレッド・ダンプを実行するためにSIGQUIT
を使用します。
JVMを埋め込んでいるアプリケーションがSIGINT
やSIGTERM
などのシグナルを頻繁にトラップする必要があると、JVMのシグナル・ハンドラの処理に支障が出る可能性があります。-Xrs
オプションを使用すると、この問題に対処できます。-Xrs
を使用すると、SIGINT
、SIGTERM
、SIGHUP
、およびSIGQUIT
に対するシグナル・マスクはJVMによって変更されず、これらのシグナルに対するシグナル・ハンドラはインストールされません。
-Xrs
を指定した場合は、2つの影響があります。
SIGQUIT
によるスレッド・ダンプを利用できない。
シャットダウン・フックの実行は、JVMが終了しようとしている時点でSystem.exit()
を呼び出すなどして、ユーザー・コード側で行います。
クラス・データ共有(CDS)モードを設定します。このオプションのmode引数には次を指定できます。
可能な場合は、CDSを使用します。これはJava HotSpot 32-Bit Client VMのデフォルト値です。
CDSの使用が必須です。クラス・データ共有を使用できない場合は、エラー・メッセージを出力し、終了します。
CDSは使用しないでください。これはJava HotSpot 32-Bit Server VM、Java HotSpot 64-Bit Client VMおよびJava HotSpot 64-Bit Server VMのデフォルト値です。
CDSアーカイブを手動で生成します。「クラス・パスの設定」の説明に従って、アプリケーション・クラス・パスを指定します。
新しいJDKリリースを使用してCDSアーカイブを再生成する必要があります。
設定を表示し、続行します。このオプションのcategory引数には次を指定できます。
設定のすべてのカテゴリを表示します。これがデフォルト値です。
ロケールに関連する設定を表示します。
システム・プロパティに関連する設定を表示します。
JVMの設定を表示します。
スレッド・スタック・サイズ(バイト単位)を設定します。Kバイトを指定するには文字k
またはK
、Mバイトを指定するには文字m
またはM
、Gバイトを指定するには文字g
またはG
を付けます。デフォルト値はプラットフォームによって異なります。
Linux/ARM (32ビット): 320Kバイト
Linux/i386 (32ビット): 320Kバイト
Linux/x64 (64ビット): 1024Kバイト
OS X (64ビット): 1024Kバイト
Oracle Solaris/i386 (32ビット): 320Kバイト
Oracle Solaris/x64 (64ビット): 1024Kバイト
次の例では、様々な単位でスレッド・スタック・サイズを1024Kバイトに設定します。
-Xss1m -Xss1024k -Xss1048576
このオプションは-XX:ThreadStackSize
と同等です。
JVM内部シグナルとして、SIGUSR1
およびSIGUSR2
のかわりに代替シグナルを使用します。このオプションは-XX:+UseAltSigs
と同等です。
バイトコード・ベリファイアのモードを設定します。バイトコード検証では、クラス・ファイルの形式が正しく、Java仮想マシンの仕様のセクション4.10、class
ファイルの検証に関する項に記載されている制約を満足していることが確認されます。
検証を無効にすると、Javaが提供している保護が低下し、形式が正しくないクラス・ファイルのために問題が発生することもあるため、無効にしないでください。
このオプションのmode引数には次を指定できます。
ブートストラップ・クラス・ローダーでロードされていないすべてのバイトコードを検証します。これは-Xverify
オプションを指定しない場合のデフォルトの動作です。
すべてのバイトコードの検証を有効にします。
すべてのバイトコードの検証を無効にします。-Xverify:none
の使用はサポートされていません。
これらのオプションはJava HotSpot VMのランタイム動作を制御します。
承認された標準のオーバーライド機構または拡張機能機構を使用する場合、java
コマンドがJavaアプリケーションを実行するのを、オプションで防止できるようにします。このオプションは、次を確認することによって、アプリケーションがそのいずれかの機構を使用しているかどうかを確認します。
java.ext.dirs
またはjava.endorsed.dirs
システム・プロパティが設定されている。
lib/endorsed
ディレクトリが存在し、空でない。
lib/ext
ディレクトリに、JDKのものを除き、あらゆるJARファイルがある。
プラットフォーム固有のシステム全体の拡張ディレクトリにJARファイルが含まれている。
ツールをJVMに添付できるメカニズムを無効にするオプションを有効にします。デフォルトでこのオプションは無効であり、添付メカニズムが有効にされていることを意味するため、jcmd
、jstack
、jmap
およびjinfo
などのツールを使用できます。
回復不能なエラーが発生した場合に、エラー・データが書き込まれるパスとファイル名を指定します。デフォルトで、このファイルは現在の作業ディレクトリに作成され、hs_err_pid
pid.log
と名付けられます。ここでpidはエラーを発生させたプロセスの識別子です。次の例では、デフォルトのログ・ファイルを設定する方法を示します(プロセスの識別子は%p
で指定されることに注意してください)。
-XX:ErrorFile=./hs_err_pid%p.log
次の例は、エラー・ログを/var/log/java/java_error.log
に設定する方法を示しています。
-XX:ErrorFile=/var/log/java/java_error.log
指定されたディレクトリにファイルを作成できない場合(領域不足、アクセス権の問題またはその他の問題のため)、ファイルはオペレーティング・システムの一時ディレクトリに作成されます。一時ディレクトリは/tmp
です。
新しい型チェッカーが失敗した場合に、古いベリファイアへの自動フェールオーバーを有効にします。デフォルトでは、このオプションは無効になっており、最近のバイトコード・バージョンのクラスに対してこれが無視されます(つまり、無効として扱われる)。古いバージョンのバイトコードのクラスに対してそれを有効にできます。
アプリケーション実行時のJava Flight Recorder (JFR)の使用を有効にします。これは、次のように、-XX:+UnlockCommercialFeatures
オプションとともに動作する商用機能です:
java -XX:+UnlockCommercialFeatures -XX:+FlightRecorder
このオプションを指定しない場合、適切なjcmd
診断コマンドを使用することで、実行中のJVMでJava Flight Recorderを有効化することもできます。
アプリケーション実行時のJava Flight Recorder (JFR)の使用を無効にします。これは、次のように、-XX:+UnlockCommercialFeatures
オプションとともに動作する商用機能です:
java -XX:+UnlockCommercialFeatures -XX:-FlightRecorder
このオプションを指定する場合、実行中のJVMでJava Flight Recorderを有効化することはできません。
JFRの動作を制御するパラメータを設定します。これは、-XX:+UnlockCommercialFeatures
オプションとともに動作する商用機能です:このオプションは、JFRが有効になっている(つまり、-XX:+FlightRecorder
オプションが指定されている)場合にのみ使用できます。
次のリストには、使用可能なすべてのJFRパラメータが含まれています。
記録が連続的バックグラウンド記録なのか、限られた期間だけ実行するのかを指定します。デフォルトでは、このパラメータはfalse
(限られた期間だけ記録を実行する)に設定されます。記録を連続的に実行するには、このパラメータをtrue
に設定します。
JFRが連続的な記録をディスクに書き込むべきかどうかを指定します。デフォルトでは、このパラメータはfalse
(ディスクへの連続的な記録を無効にする)に設定されます。有効にするには、このパラメータをtrue
に設定し、同時にdefaultrecording=true
に設定します。
制御された方法でJVMが終了するときに、JFRデータのダンプ・ファイルを生成するべきかどうかを指定します。デフォルトでは、このパラメータはfalse
(終了時にダンプ・ファイルを生成しない)に設定されます。有効にするには、このパラメータをtrue
に設定し、同時にdefaultrecording=true
に設定します。
ダンプ・ファイルは、dumponexitpath
パラメータによって定義された場所に書き込まれます。
制御された方法でJVMが終了するとき(dumponexit=true
パラメータを設定した場合)に作成される、JFRデータを含むダンプ・ファイルのパスと名前を指定します。このパスの設定は、同時にdefaultrecording=true
を設定した場合にのみ有効です。
指定されたパスがディレクトリの場合、JVMは作成日時を示すファイル名を割り当てます。指定されたパスにファイル名が含まれており、そのファイルがすでに存在する場合、JVMは指定されたファイル名に日時スタンプを追加して新しいファイルを作成します。
データの保持に使用されるプライマリ・メモリーの合計量(バイト単位)を指定します。Kバイト単位のサイズを指定するにはk
またはK
、Mバイト単位のサイズを指定するにはm
またはM
、Gバイト単位のサイズを指定するにはg
またはG
を付けます。デフォルトでは、このサイズは462848バイトに設定されます。
JFRによってログ・ファイルに書き込まれるデータの量を指定します。デフォルトでは、info
に設定されます。
デフォルトの記録用にディスク・データを維持する最大期間を指定します。時間を秒で指定するためにはs
、分の場合はm
、時間の場合はh
または日の場合d
を追加します(たとえば、30s
の指定は、30秒を意味します)。デフォルトでは、最大期間は15分(15m
)に設定されます。
このパラメータは、disk=true
パラメータを設定した場合にのみ有効です。
記録のデータ・チャンクの最大サイズ(バイト単位)を指定します。Kバイト単位のサイズを指定するにはk
またはK
、Mバイト単位のサイズを指定するにはm
またはM
、Gバイト単位のサイズを指定するにはg
またはG
を付けます。デフォルトでは、データ・チャンクの最大サイズは12Mバイトに設定されます。
デフォルト記録用に維持するディスク・データの最大サイズ(バイト単位)を指定します。Kバイト単位のサイズを指定するにはk
またはK
、Mバイト単位のサイズを指定するにはm
またはM
、Gバイト単位のサイズを指定するにはg
またはG
を付けます。デフォルトで、ディスク・データの最大サイズは無制限で、このパラメータは0に設定されています。
このパラメータは、disk=true
パラメータを設定した場合にのみ有効です。
一時ディスク・ストレージのリポジトリ(ディレクトリ)を指定します。デフォルトでは、システムの一時ディレクトリが使用されます。
スレッド・サンプリングを有効にするかどうかを指定します。スレッド・サンプリングは、このパラメータとともにサンプリング・イベントが有効にされている場合にのみ行われます。デフォルトでは、このパラメータは有効になっています。
イベント設定ファイル(種類はJFC)のパスと名前を指定します。デフォルトでは、JAVA_HOME/jre/lib/jfr
にあるdefault.jfc
ファイルが使用されます。
JFRによるスタック・トレースのスタックの深さ。デフォルトでは、この深さは64回のメソッド呼出しに設定されます。最大は2048、最小は1です。
スレッドごとのローカル・バッファ・サイズ(バイト単位)を指定します。Kバイト単位のサイズを指定するにはk
またはK
、Mバイト単位のサイズを指定するにはm
またはM
、Gバイト単位のサイズを指定するにはg
またはG
を付けます。このパラメータの値を大きくすると、グローバル・ストレージへのフラッシュと競合せずに、より多くのデータを収集できます。スレッドリッチ環境でアプリケーション・フットプリントが増加する場合があります。デフォルトでは、ローカル・バッファ・サイズは5Kバイトに設定されます。
複数のパラメータの値を指定するには、それらをコロンで区切ります。たとえば、連続的な記録をディスクに書き込むようにJFRに指示し、データ・チャンクの最大サイズを10Mバイトに設定するには、次を指定します。
-XX:FlightRecorderOptions=defaultrecording=true,disk=true,maxchunksize=10M
Solarisでは、Javaヒープに使用されるラージ・ページの最大サイズ(バイト単位)を設定します。size引数は2の累乗でなければなりません(2、4、8、16...)。キロバイトを指定するには文字k
またはK
、メガバイトを指定するには文字m
またはM
、ギガバイトを指定するには文字g
またはG
を付けます。デフォルトでサイズは0に設定され、JVMがラージ・ページのサイズを自動的に選択することを意味します。
次の例では、ラージ・ページ・サイズを4Mバイトに設定する方法を示します。
-XX:LargePageSizeInBytes=4m
New I/O (java.nio
パッケージ)ダイレクトバッファ割当ての最大合計サイズ(バイト単位)を設定します。キロバイトを指定するには文字k
またはK
、メガバイトを指定するには文字m
またはM
、ギガバイトを指定するには文字g
またはG
を付けます。デフォルトでサイズは0に設定され、JVMがNIOダイレクトバッファ割当てのサイズを自動的に選択することを意味します。
次の例では、様々な単位でNIOのサイズを1024Kバイトに設定する方法を示しています。
-XX:MaxDirectMemorySize=1m -XX:MaxDirectMemorySize=1024k -XX:MaxDirectMemorySize=1048576
JVMネイティブ・メモリーの使用状況の追跡のモードを指定します。このオプションのmode引数には次を指定できます。
JVMネイティブ・メモリーの使用状況を追跡しません。これは-XX:NativeMemoryTracking
オプションを指定しない場合のデフォルトの動作です。
Javaヒープ、クラス、コード、およびスレッドなどのJVMサブシステムによるメモリー使用状況のみを追跡します。
JVMサブシステムによるメモリー使用状況の追跡に加えて、各CallSite
、各仮想メモリー領域およびそのコミット済領域によるメモリー使用状況を追跡します。
Javaオブジェクトのメモリー配置を設定します(バイト単位)。デフォルトでは、値が8バイトに設定されます。指定される値は、2の累乗にして8から256(両端を含む)の範囲内にする必要があります。このオプションにより、大きいJavaヒープ・サイズで圧縮ポインタを使用できます。
バイト単位のヒープ・サイズ制限は次のように計算されます:
4GB * ObjectAlignmentInBytes
注意: 配置の値が増えると、オブジェクト間の未使用の領域も増えます。結果として、大きいヒープ・サイズで圧縮ポインタを使用するメリットがわからない可能性があります。
回復不能なエラーが発生した場合に実行するカスタム・コマンドまたは一連のセミコロン区切りのコマンドを設定します。文字列にスペースを含む場合は、二重引用符で囲む必要があります。
次の例は、-XX:OnError
オプションを使用してgcore
コマンドを実行する方法を示しています。回復不能なエラーが発生した場合に、このコマンドによってコア・イメージを作成し、デバッガを起動してプロセスに接続します(%p
は現在のプロセスを指定します)。
-XX:OnError="gcore %p;dbx - %p"
OutOfMemoryError
例外が最初にスローされた場合に実行するカスタム・コマンドまたは一連のセミコロン区切りのコマンドを設定します。文字列にスペースを含む場合は、二重引用符で囲む必要があります。コマンド文字列の例については、-XX:OnError
オプションの説明を参照してください。
有効にすると、Javaアプリケーションの終了時にjstat
(1)バイナリ・データを保存します。このバイナリ・データは、hsperfdata_
<pid>
という名前のファイルに保存されます。ここで<pid>
は実行したJavaアプリケーションのプロセス識別子です。次のようにjstat
を使用して、このファイルに含まれるパフォーマンス・データを表示します。
jstat -class file:///<path>/hsperfdata_<pid> jstat -gc file:///<path>/hsperfdata_<pid>
trueの場合は、そのCPU CFS (Completely Fair Scheduler)割当ての値(設定されている場合)に基づいてコンテナCPUの可用性を計算します。falseの場合、CPU共有値がCPU割当て値より小さければ、CPU共有値をかわりに使用します。
VMでは、-XX:ActiveProcessorCount
オプションを使用して指定しなかった場合、コンテナCPUの可用性の値を使用して、使用可能なプロセッサの数を計算します。
注意: プロセスで使用可能なアクティブ・プロセッサの数をCPU数が超えることはありません。アクティブなプロセッサは、無効にするか、コンテナのcpuset (CPUのリスト。PrintContainerInfo
オプションを参照)を選択することによって、制限されている場合があります。
コマンド行に表示されるエルゴノミクスに従って選択されたJVMフラグの出力を有効にします。これは、ヒープ領域サイズや選択されたガベージ・コレクタなどのJVMによって設定されたエルゴノミクス値を知るために役立つ可能性があります。デフォルトでは、このオプションは無効になっており、フラグは出力されません。
コンテナに関する次の情報を出力します:
cpuset.cpus
: 複数のCPUまたはコアがある場合にコンテナで使用できるCPUまたはコアのカンマ区切りのリストまたはハイフン区切りの範囲。たとえば、0-3という値は、コンテナが最初、2番目、3番目および4番目のCPUを使用できることを意味します。cpuset.mems
: 実行、アプリケーションの実行を許可するメモリー・ノード(MRM)のカンマ区切りリストまたはハイフン区切りの範囲。不均一メモリー・アクセス(NUMA)システムでのみ有効です。CPU Shares
: プロセスで使用可能なCPU共有の量。CPU Quota
: 期間当たりのプロセスが実行されることが保証された時間(ミリ秒)。CPU Period
: CPUのCompletely Fair Scheduler (CFS)期間(ミリ秒単位)OSContainer::active_processor_count
: 使用するVMのアクティブなプロセッサの数。Memory Limit
: コンテナで使用できるメモリーの最大量(バイト単位)。Memory Soft Limit
: コンテナで使用するメモリーの最大量(バイト単位)。この制限はMemory Limitよりも小さくなりますが、ソフト制限のためコンテナはその値を超える場合があります。Memory Usage
: このプロセスの使用済メモリーの量(バイト単位)。Maximum Memory Usage
: このプロセスの使用済メモリーの最大量(バイト単位)。メモリー追跡が有効にされている場合(-XX:NativeMemoryTracking
を参照)、JVMで収集されたネイティブ・メモリー追跡データの出力を有効にします。デフォルトでは、このオプションは無効になっており、ネイティブ・メモリー追跡データは出力されません。
ベリファイアのアクセス制御チェックの量を減らします。デフォルトでは、このオプションは無効になっており、最近のバイトコード・バージョンのクラスに対してこれが無視されます(つまり、無効として扱われる)。古いバージョンのバイトコードのクラスに対してそれを有効にできます。
アプリケーションの実行中にリソース管理の使用を有効にします。
これは、次のように-XX:+UnlockCommercialFeatures
オプションを同時に指定する必要がある商用機能です。
java -XX:+UnlockCommercialFeatures -XX:+ResourceManagement
ミリ秒単位でリソース管理測定のサンプリング間隔を制御するパラメータを設定します。
リソース管理が有効な場合のみ(つまり、-XX:+ResourceManagement
オプションが指定されている場合)、このオプションを使用できます。
クラス・データ共有(CDS)アーカイブ・ファイルのパスと名前を指定します
クラス・データ共有(CDS)アーカイブに格納するクラス・ファイルの名前を含むテキスト・ファイルを指定します。このファイルは、クラス・ファイルのフル・ネームを1行に1つ含みます。ただしスラッシュ(/
)はドット(.
)に置換されます。たとえば、クラスjava.lang.Object
とhello.Main
を指定するには、次の2行を含むテキスト・ファイルを作成します。
java/lang/Object hello/Main
このテキスト・ファイルで指定するクラス・ファイルには、アプリケーションでよく使用されるクラスを含める必要があります。アプリケーション、機能拡張またはブートストラップ・クラス・パスからのあらゆるクラスが含まれる場合があります。
JVMで回復不能なエラーが発生した場合に、ダイアログ・ボックスの表示を有効にします。これにより、JVMの終了を回避し、プロセスをアクティブに維持するため、これにデバッガを接続して、エラーの原因を調査できます。デフォルトでは、このオプションは無効になっています。
JavaアプリケーションのJFR記録を開始します。これは、-XX:+UnlockCommercialFeatures
オプションとともに動作する商用機能です:このオプションは、実行時に記録を開始するJFR.start
診断コマンドと同等です。JFR記録を開始するときに、次のパラメータを設定できます。
gzip
ファイル圧縮ユーティリティを使用してディスク上のJFR記録ログ・ファイル(種類はJFR)を圧縮するかどうかを指定します。このパラメータは、filename
パラメータが指定されている場合にのみ有効です。デフォルトでは、false
(記録を圧縮しない)に設定されます。圧縮を有効にするには、このパラメータをtrue
に設定します。
記録が連続的バックグラウンド記録なのか、限られた期間だけ実行するのかを指定します。デフォルトでは、このパラメータはfalse
(限られた期間だけ記録を実行する)に設定されます。記録を連続的に実行するには、このパラメータをtrue
に設定します。
Javaアプリケーションの起動時間から記録を開始するまでの遅延時間を指定します。時間を秒で指定するためにはs
、分の場合はm
、時間の場合はh
または日の場合はd
を追加します(たとえば、10m
の指定は、10分を意味します)。デフォルトでは、遅延はなく、このパラメータは0に設定されます。
制御された方法でJVMが終了するときに、JFRデータのダンプ・ファイルを生成するべきかどうかを指定します。デフォルトでは、このパラメータはfalse
(終了時にダンプ・ファイルを生成しない)に設定されます。有効にするには、パラメータをtrue
に設定します。
ダンプ・ファイルは、filename
パラメータで定義された場所に書き込まれます。
例:
-XX:StartFlightRecording=name=test,filename=D:\test.jfr,dumponexit=true
記録の継続時間を指定します。時間を秒で指定するためにはs
、分の場合はm
、時間の場合はh
または日の場合はd
を追加します(たとえば、5h
の指定は、5時間を意味します)。デフォルトで、継続時間は無制限で、このパラメータは0に設定されています。
JFR記録ログ・ファイルのパスと名前を指定します。
JFR記録の識別子を返します。デフォルトでは、Recording x
に設定されます。
デフォルトの記録用にディスク・データを維持する最大期間を指定します。時間を秒で指定するためにはs
、分の場合はm
、時間の場合はh
または日の場合d
を追加します(たとえば、30s
の指定は、30秒を意味します)。デフォルトでは、最大期間は15分(15m
)に設定されます。
デフォルト記録用に維持するディスク・データの最大サイズ(バイト単位)を指定します。Kバイト単位のサイズを指定するにはk
またはK
、Mバイト単位のサイズを指定するにはm
またはM
、Gバイト単位のサイズを指定するにはg
またはG
を付けます。デフォルトで、ディスク・データの最大サイズは無制限で、このパラメータは0に設定されています。
イベント設定ファイル(種類はJFC)のパスと名前を指定します。デフォルトでは、JAVA_HOME/jre/lib/jfr
にあるdefault.jfc
ファイルが使用されます。
複数のパラメータの値を指定するには、それらをコロンで区切ります。たとえば、現在の作業ディレクトリ内のtest.jfrに記録を保存し、ログ・ファイルを圧縮するようにJFRに指示するには、次を指定します。
-XX:StartFlightRecording=filename=test.jfr,compress=true
スレッド・スタック・サイズ(バイト単位)を設定します。キロバイトを指定するには文字k
またはK
、メガバイトを指定するには文字m
またはM
、ギガバイトを指定するには文字g
またはG
を付けます。デフォルト値はプラットフォームによって異なります。
Linux/ARM (32ビット): 320Kバイト
Linux/i386 (32ビット): 320Kバイト
Linux/x64 (64ビット): 1024Kバイト
OS X (64ビット): 1024Kバイト
Oracle Solaris/i386 (32ビット): 320Kバイト
Oracle Solaris/x64 (64ビット): 1024Kバイト
次の例では、様々な単位でスレッド・スタックのサイズを1024Kバイトに設定する方法を示しています。
-XX:ThreadStackSize=1m -XX:ThreadStackSize=1024k -XX:ThreadStackSize=1048576
このオプションは-Xss
と同等です。
クラスがロードされたときに、それらの追跡を有効にします。デフォルトでは、このオプションは無効になっており、クラスは追跡されません。
ロードされたすべてのクラスの追跡をそれらが参照される順番で有効にします。デフォルトでは、このオプションは無効になっており、クラスは追跡されません。
定数プールの解決の追跡を有効にします。デフォルトでは、このオプションは無効になっており、定数プールの解決は追跡されません。
クラスがアンロードされたときに、それらの追跡を有効にします。デフォルトでは、このオプションは無効になっており、クラスは追跡されません。
ローダーの制約の記録の追跡を有効にします。デフォルトでは、このオプションは無効であり、ローダー制約の記録は追跡されません。
商用機能の使用を有効にします。商用機能は、http://www.oracle.com/technetwork/java/javase/terms/products/index.htmlのJava SE製品
のページで定義されているOracle Java SE AdvancedまたはOracle Java SE Suiteパッケージに含まれています。
デフォルトでは、このオプションは無効になっており、JVMは商用機能なしで実行します。JVMプロセスでそれらを有効にすると、そのプロセスでのそれらの使用を無効にすることはできません。
このオプションを指定しない場合、適切なjcmd
診断コマンドを使用することでも、実行中のJVMで商用機能のロックを解除できます。
JVM内部シグナルとして、SIGUSR1
およびSIGUSR2
のかわりに代替シグナルを使用できるようにします。デフォルトでは、このオプションは無効になっており、代替シグナルは使用されません。このオプションは-Xusealtsigs
と同等です。
アプリケーション・クラス・データ共有(AppCDS)を有効化します。AppCDSを使用するには、CDSダンプ時刻(オプション-Xshare:dump
を参照)とアプリケーション実行時刻の間に、オプション-XX:SharedClassListFile
および-XX:SharedArchiveFile
の値を指定する必要もあります。
これは、-XX:+UnlockCommercialFeatures
オプションを同時に指定する必要がある商用機能です。これは実験的な機能でもあり、今後のリリースで変更される場合があります。
「アプリケーション・クラス・データ共有」を参照してください。
バイアス・ロックの使用を無効にします。大量の非競合同期を行うアプリケーションは、このフラグを有効にすることで大幅な高速化が実現されることがありますが、特定のパターンのロックを行うアプリケーションは速度が低下することがあります。Biased Locking技法の詳細は、http://www.oracle.com/technetwork/java/tuning-139912.html#section4.2.5
のJavaのチューニングに関するホワイト・ペーパーの例を参照してください。
デフォルトでは、このオプションが有効になっています。
圧縮されたポインタの使用を無効にします。デフォルトではこのオプションが有効であり、Javaヒープ・サイズが32GBより小さい場合に圧縮ポインタが使用されます。このオプションが有効にされている場合、オブジェクト参照は64ビット・ポインタの代わりに32ビットのオフセットで表され、アプリケーションを32GB未満のJavaヒープ・サイズで実行している場合に、一般にパフォーマンスが向上します。このオプションは64ビットJVMの場合にのみ機能します。
Javaヒープ・サイズが32GBより大きい場合にも圧縮ポインタを使用できます。-XX:ObjectAlignmentInBytes
オプションを参照してください。
VMで自動コンテナ検出サポートが提供され、これによって、Dockerコンテナ内で実行されるJavaプロセスで使用可能なメモリーの容量およびプロセッサの数をVMで決定できます。この情報はシステム・リソースを割り当てるために使用されます。このサポートはLinux x64プラットフォームでのみ使用できます。サポートされている場合、このフラグのデフォルト値はtrue
で、コンテナのサポートはデフォルトで有効になります。無効にするには、-XX:-UseContainerSupport
を使用します。
Linux用のこのオプションは、-XX:+UseLargePages
を指定するのと同じです。このオプションはデフォルトでは無効です。このオプションは、メモリーの予約時にすべてのラージ・ページを事前に割り当てます。そのため、JVMはラージ・ページ・メモリー領域を動的に拡張または縮小できません。この動作を行う場合は、-XX:UseTransparentHugePages
を参照してください。
詳細は、「ラージ・ページ」を参照してください。
ラージ・ページ・メモリーの使用を有効にします。デフォルトでは、このオプションは無効になっており、ラージ・ページ・メモリーは使用されません。
詳細は、「ラージ・ページ」を参照してください。
スレッド状態の遷移時にメンバーの発行を有効にします。このオプションは、有効になっているARMサーバーを除くすべてのプラットフォーム上で、デフォルトでは無効になっています。(ARMサーバーでこのオプションを無効にしないことをお薦めします。)
perfdata
機能を有効にします。このオプションはデフォルトで有効にされており、JVMのモニタリングとパフォーマンスのテストが許可されます。これを無効にすると、hsperfdata_userid
ディレクトリの作成が抑制されます。perfdata
機能を無効にするには、-XX:-UsePerfData
を指定します。
Linuxでは、動的に拡張または縮小できるラージ・ページの使用を有効化してください。このオプションはデフォルトでは無効です。OSが他のページを移動してヒュージ・ページを作成するため、透過的ヒュージ・ページでパフォーマンスの問題が検出される場合があります。このオプションは試験的に使用できます。
詳細は、「ラージ・ページ」を参照してください。
アプリケーションがシグナル・ハンドラをインストールできるようにします。デフォルトでは、このオプションは無効になっており、アプリケーションはシグナル・ハンドラをインストールできません。
これらのオプションはJava HotSpot VMによって実行されるJust-in-Time (JIT)動的コンパイルを制御します。
将来のリリースでデフォルトになることが予想される積極的なパフォーマンス最適化機能の使用を有効にします。デフォルトでは、このオプションは無効になっており、試験的パフォーマンス機能は使用されません。
インスタンス割当てポインタの前にプリフェッチする行数を設定します。デフォルトでプリフェッチする行数は1に設定されています。
-XX:AllocateInstancePrefetchLines=1
Java HotSpot Server VMのみが、このオプションをサポートしています。
オブジェクト割当てのプリフェッチ距離のサイズ(バイト単位)を設定します。新しいオブジェクトの値で書き込まれようとしているメモリーが、最後に割り当てられたオブジェクトのアドレスからこの距離まで、プリフェッチされます。各Javaスレッドは独自の割当てポイントがあります。
マイナスの値は、プリフェッチ距離がプラットフォームに基づいて選択されたことを示します。プラスの値はプリフェッチするバイトです。キロバイトを指定するには文字k
またはK
、メガバイトを指定するには文字m
またはM
、ギガバイトを指定するには文字g
またはG
を付けます。デフォルト値は-1に設定されます。
次の例は、プリフェッチ距離を1024バイトに設定する方法を示しています。
-XX:AllocatePrefetchDistance=1024
Java HotSpot Server VMのみが、このオプションをサポートしています。
割当てポインタの前にプリフェッチするプリフェッチ命令を設定します。Java HotSpot Server VMのみが、このオプションをサポートしています。指定可能な値は0から3です。値の背後にある実際の命令はプラットフォームによって異なります。デフォルトで、プリフェッチ命令は0に設定されます。
-XX:AllocatePrefetchInstr=0
Java HotSpot Server VMのみが、このオプションをサポートしています。
コンパイル済コードで生成されるプリフェッチ命令を使用して、最後のオブジェクトの割当て後にロードされるキャッシュ行数を設定します。デフォルト値は、最後に割り当てられたオブジェクトがインスタンスの場合は1で、配列の場合は3になります。
次の例は、ロードされるキャッシュ行数を5に設定する方法を示しています。
-XX:AllocatePrefetchLines=5
Java HotSpot Server VMのみが、このオプションをサポートしています。
連続したプリフェッチ命令のステップ・サイズ(バイト単位)を設定します。キロバイトを指定するには文字k
またはK
、メガバイトを指定するには文字m
またはM
、ギガバイトを指定するには文字g
またはG
を付けます。デフォルトでは、ステップ・サイズは16バイトに設定されます。
-XX:AllocatePrefetchStepSize=16
Java HotSpot Server VMのみが、このオプションをサポートしています。
プリフェッチ命令の生成されるコード・スタイルを設定します。style引数は0から3の整数です。
プリフェッチ命令を生成しません。
各割当て後にプリフェッチ命令を実行します。これはデフォルトのパラメータです。
スレッドローカル割当てブロック(TLAB)ウォーターマーク・ポインタを使用して、プリフェッチ命令を実行するタイミングを決定します。
SPARCで割当てプリフェッチにはBIS命令を使用します。
Java HotSpot Server VMのみが、このオプションをサポートしています。
バックグラウンド・コンパイルを有効にします。このオプションは、デフォルトで有効になっています。バックグラウンド・コンパイルを無効にするには、-XX:-BackgroundCompilation
を指定します(これは-Xbatch
を指定するのと同等です)。
コンパイルに使用するコンパイラ・スレッド数を設定します。デフォルトで、スレッド数はサーバーJVMの場合に2に設定され、クライアントJVMの場合に1に設定され、階層型コンパイルが使用される場合はコア数まで拡大されます。次の例は、スレッド数を2に設定する方法を示しています。
-XX:CICompilerCount=2
コンパイルに必要な最小空き領域(バイト単位)を設定します。キロバイトを指定するには文字k
またはK
、メガバイトを指定するには文字m
またはM
、ギガバイトを指定するには文字g
またはG
を付けます。残りが最小空き領域より少なくなると、コンパイルは停止します。デフォルトでは、このオプションは500Kバイトに設定されます。次の例は、最小空き領域を1024Mバイトに設定する方法を示しています。
-XX:CodeCacheMinimumFreeSpace=1024m
メソッドで実行するコマンドを指定します。たとえば、String
クラスのindexOf()
メソッドをコンパイルから除外するには、次を使用します。
-XX:CompileCommand=exclude,java/lang/String.indexOf
スラッシュ(/
)で区切られたすべてのパッケージとサブパッケージを含む完全クラス名を指定することに注意してください。切取りおよび貼付け操作を簡単にするため、-XX:+PrintCompilation
および-XX:+LogCompilation
オプションによって生成されるメソッド名形式を使用することもできます。
-XX:CompileCommand=exclude,java.lang.String::indexOf
メソッドを署名なしで指定した場合、コマンドは指定した名前を持つすべてのメソッドに適用されます。ただし、クラス・ファイル形式でメソッドの署名を指定することもできます。この場合、引数を引用符で囲んでください。そうしないと、シェルではセミコロンをコマンドの終了として扱います。たとえば、String
クラスのindexOf(String)
メソッドのみをコンパイルから除外する場合は、次を使用します。
-XX:CompileCommand="exclude,java/lang/String.indexOf,(Ljava/lang/String;)I"
クラスおよびメソッド名にワイルドカードとしてアスタリスク(*)を使用することもできます。たとえば、すべてのクラスのすべてのindexOf()
メソッドをコンパイルから除外するには、次を使用します。
-XX:CompileCommand=exclude,*.indexOf
カンマとピリオドはスペースの別名で、シェル経由でコンパイラ・コマンドを簡単に渡せるようになります。引数を引用符で囲んで、セパレータとしてスペースを使用して、-XX:CompileCommand
に引数を渡すことができます。
-XX:CompileCommand="exclude java/lang/String indexOf"
-XX:CompileCommand
オプションを使用して、コマンド行に渡されたコマンドが解析されると、JITコンパイラは.hotspot_compiler
ファイルからコマンドを読み取ります。このファイルにコマンドを追加するか、-XX:CompileCommandFile
オプションを使用して別のファイルを指定できます。
複数のコマンドを追加するには、-XX:CompileCommand
オプションを複数回指定するか、各引数を改行セパレータ(\n
)で区切ります。次のコマンドを使用できます。
デバッグ時に指定したメソッドのコンパイルの開始時にJVMが停止するブレークポイントを設定します。
指定したメソッドを除くすべてのメソッドをコンパイルから除外します。かわりに、-XX:CompileOnly
オプションを使用でき、これにより複数のメソッドを指定できます。
指定したメソッドのインライン化を妨げます。
指定したメソッドをコンパイルから除外します。
-XX:CompileCommand
オプションのヘルプ・メッセージを出力します。
指定したメソッドのインライン化を試みます。
指定したメソッドを除くすべてのメソッドのコンパイルのロギングを除外します(-XX:+LogCompilation
オプションを使用して)。デフォルトで、ロギングはすべてのコンパイル済メソッドに対して実行されます。
このコマンドは、最後の引数(option)の代わりに、指定したメソッドにJITコンパイル・オプションを渡すために使用できます。このコンパイル・オプションは、メソッド名の後の最後に設定します。たとえば、StringBuffer
クラスのappend()
メソッドのBlockLayoutByFrequency
オプションを有効にするには、次を使用します。
-XX:CompileCommand=option,java/lang/StringBuffer.append,BlockLayoutByFrequency
カンマまたはスペースで区切った複数のコンパイル・オプションを指定できます。
指定したメソッドのコンパイル後に生成されたアセンブラ・コードを出力します。
コンパイル・コマンドを出力しません。デフォルトで、-XX:CompileCommand
オプションで指定したコマンドが出力されます。たとえば、String
クラスのindexOf()
メソッドをコンパイルから除外した場合は、次が標準出力に出力されます。
CompilerOracle: exclude java/lang/String.indexOf
これを抑制するには、他の-XX:CompileCommand
オプションの前に-XX:CompileCommand=quiet
オプションを指定します。
JITコンパイラ・コマンドが読み取られるファイルを設定します。デフォルトで、.hotspot_compiler
ファイルは、JITコンパイラによって実行されるコマンドを格納するために使用されます。
コマンド・ファイルの各行は、コマンド、クラス名、およびコマンドが使用されるメソッド名を表します。たとえば、この行は、String
クラスのtoString()
メソッドのアセンブリ・コードを出力します。
print java/lang/String toString
メソッドで実行するJITコンパイラのコマンドを指定する詳細については、-XX:CompileCommand
オプションを参照してください。
コンパイルを制限すべきメソッドのリスト(カンマ区切り)を設定します。指定したメソッドのみをコンパイルします。パッケージとサブパッケージを含む完全クラス名で各メソッドを指定します。たとえば、String
クラスのlength()
メソッドとList
クラスのsize()
メソッドのみをコンパイルするには、次を使用します。
-XX:CompileOnly=java/lang/String.length,java/util/List.size
スラッシュ(/
)で区切られたすべてのパッケージとサブパッケージを含む完全クラス名を指定することに注意してください。切取りおよび貼付け操作を簡単にするため、-XX:+PrintCompilation
および-XX:+LogCompilation
オプションによって生成されるメソッド名形式を使用することもできます。
-XX:CompileOnly=java.lang.String::length,java.util.List::size
ワイルドカードはサポートされていませんが、クラスまたはパッケージ名のみを指定して、そのクラスまたはパッケージ内のすべてのメソッドをコンパイルすることも、メソッドのみを指定していずれかのクラス内のこの名前を持つメソッドをコンパイルすることもできます。
-XX:CompileOnly=java/lang/String -XX:CompileOnly=java/lang -XX:CompileOnly=.length
コンパイル前に解析対象メソッドの呼出しの数を設定します。デフォルトで、サーバーJVMでは、JITコンパイラは10,000回の解析対象メソッドの呼出しを実行して、効率的なコンパイルのための情報を収集します。クライアントJVMの場合、デフォルトの設定は1,500回の呼出しです。層コンパイルが有効な場合、このオプションは無視されます。オプション-XX:+TieredCompilation
を参照してください。次の例は、解析対象メソッドの呼出し数を5,000に設定する方法を示しています。
-XX:CompileThreshold=5000
-Xcomp
オプションを指定して、コンパイル前にJavaメソッドの解析を完全に無効にできます。
エスケープ解析の使用を有効にします。このオプションは、デフォルトで有効になっています。エスケープ解析の使用を無効にするには-XX:-DoEscapeAnalysis
を指定します。Java HotSpot Server VMのみが、このオプションをサポートしています。
初期コード・キャッシュ・サイズ(バイト単位)を設定します。キロバイトを指定するには文字k
またはK
、メガバイトを指定するには文字m
またはM
、ギガバイトを指定するには文字g
またはG
を付けます。デフォルト値は500Kバイトに設定されます。初期コード・キャッシュ・サイズをシステムの最小メモリー・ページ・サイズより小さくしないでください。次の例は、初期コード・キャッシュ・サイズを32Kバイトに設定する方法を示しています。
-XX:InitialCodeCacheSize=32k
メソッドのインライン化を有効にします。このオプションは、パフォーマンス向上のため、デフォルトで有効になっています。メソッドのインライン化を無効にするには、-XX:-Inline
を指定します。
インライン化すべきコンパイル済メソッドの最大コード・サイズ(バイト単位)を設定します。キロバイトを指定するには文字k
またはK
、メガバイトを指定するには文字m
またはM
、ギガバイトを指定するには文字g
またはG
を付けます。指定したサイズより小さいサイズを持つコンパイル済メソッドのみがインライン化されます。デフォルトでは、最大コード・サイズは1000バイトに設定されます。
-XX:InlineSmallCode=1000
現在の作業ディレクトリ内のhotspot.log
というファイルへのコンパイル・アクティビティのロギングを有効にします。-XX:LogFile
オプションを使用して、別のログ・ファイル・パスと名前を指定できます。
デフォルトでは、このオプションは無効になっており、コンパイル・アクティビティはログに記録されません。-XX:+LogCompilation
オプションは、診断JVMオプションのロックを解除する-XX:UnlockDiagnosticVMOptions
オプションと一緒に使用する必要があります。
-XX:+PrintCompilation
オプションを使用して、メソッドがコンパイルされるたびに、コンソールにメッセージが出力される詳細診断出力を有効にできます。
インラインするメソッドの最大バイトコード・サイズ(バイト単位)を設定します。キロバイトを指定するには文字k
またはK
、メガバイトを指定するには文字m
またはM
、ギガバイトを指定するには文字g
またはG
を付けます。デフォルトでは、最大バイトコード・サイズは35バイトに設定されます。
-XX:MaxInlineSize=35
単一のメソッドのコンパイル時に使用されるノードの最大数を設定します。デフォルトでは、ノードの最大数は65,000に設定されます。
-XX:MaxNodeLimit=65000
インライン化する簡易メソッドの最大バイトコード・サイズ(バイト単位)を設定します。キロバイトを指定するには文字k
またはK
、メガバイトを指定するには文字m
またはM
、ギガバイトを指定するには文字g
またはG
を付けます。デフォルトでは、簡易メソッドの最大バイトコード・サイズは6バイトに設定されます。
-XX:MaxTrivialSize=6
String
連結操作の最適化を有効にします。このオプションは、デフォルトで有効になっています。String
連結操作の最適化を有効にするには、-XX:-OptimizeStringConcat
を指定します。Java HotSpot Server VMのみが、このオプションをサポートしています。
外部disassembler.so
ライブラリを使用して、バイト・コード化されたメソッドおよびネイティブ・メソッド用のアセンブリ・コードの出力を有効にします。これにより、生成されたコードを表示できるため、パフォーマンス問題の診断に役立つことがあります。
デフォルトでは、このオプションは無効になっており、アセンブリ・コードは出力されません。-XX:+PrintAssembly
オプションは、診断JVMオプションのロックを解除する-XX:UnlockDiagnosticVMOptions
オプションと一緒に使用する必要があります。
メソッドがコンパイルされるたびに、コンソールにメッセージを出力することによって、JVMからの詳細診断出力を有効にします。これにより、実際にコンパイルされるメソッドを確認できます。デフォルトでは、このオプションは無効になっており、診断出力は出力されません。
-XX:+LogCompilation
オプションを使用して、コンパイル・アクティビティをファイルに記録することもできます。
インライン化の出力の決定を有効にします。これにより、インライン化されるメソッドを確認できます。
デフォルトでは、このオプションは無効になっており、インライン化情報は出力されません。-XX:+PrintInlining
オプションは、診断JVMオプションのロックを解除する-XX:UnlockDiagnosticVMOptions
オプションと一緒に使用する必要があります。
JITでコンパイルされたコードの最大コード・キャッシュ・サイズ(バイト単位)を設定します。キロバイトを指定するには文字k
またはK
、メガバイトを指定するには文字m
またはM
、ギガバイトを指定するには文字g
またはG
を付けます。デフォルトの最大コード・キャッシュ・サイズは240MBです。オプション-XX:-TieredCompilation
を使用して階層化コンパイルを無効にした場合、デフォルトのサイズは48MBです。このオプションは2GBの制限があります。そうでない場合は、エラーが生成されます。最大コード・キャッシュ・サイズを初期コード・キャッシュ・サイズより小さくしないでください。-XX:InitialCodeCacheSize
オプションを参照してください。このオプションは-Xmaxjitcodesize
と同等です。
RTM中止率は、すべての実行済RTMトランザクションに対するパーセンテージ(%)として指定されます。中止されたトランザクション数がこの率を超えた場合、コンパイルされたコードが非最適化されます。この率は、-XX:+UseRTMDeopt
オプションが有効な場合に使用されます。このオプションのデフォルト値は50です。つまり、すべてのトランザクションの50%が中止された場合、コンパイルされたコードが非最適化されます。
中止またはビジーの場合、RTMロック・コードは、標準のロック・メカニズムにフォールバックする前にこのオプションによって指定された回数再試行されます。このオプションのデフォルト値は5です。-XX:UseRTMLocking
オプションを有効化する必要があります。
階層化コンパイルの使用を無効にします。デフォルトでは、このオプションが有効になっています。Java HotSpot Server VMのみが、このオプションをサポートしています。
Intel、AMDおよびSPARCハードウェアに対して、ハードウェアベースのAES組込みを有効化します。Intel Westmere (2010以降)、AMD Bulldozer (2011以降)およびSPARC (T4以降)が、サポートされているハードウェアです。UseAESは、UseAESIntrinsicsとともに使用します。
UseAESとUseAESIntrinsicsフラグはデフォルトで有効化されており、Java HotSpot Server VM 32ビットおよび64ビットに対してのみサポートされています。ハードウェアベースのAES組込みを無効化するには、-XX:-UseAES -XX:-UseAESIntrinsics
を指定します。たとえば、ハードウェアAESを有効化するには、次のフラグを使用します。
-XX:+UseAES -XX:+UseAESIntrinsics
32ビットおよび64ビットに対してUseAESおよびUseAESIntrinsicsフラグをサポートするには、-server
オプションを使用してJava HotSpot Server VMを選択します。これらのフラグは、クライアントVMではサポートされていません。
コンパイラのシャットダウン前に、コード・キャッシュのフラッシュを有効にします。このオプションは、デフォルトで有効になっています。コンパイラのシャットダウン前に、コード・キャッシュのフラッシュを無効にするには、-XX:-UseCodeCacheFlushing
を指定します。
カード表を更新する前に、カードがすでにマークされているかどうかのチェックを有効にします。このオプションは、デフォルトで無効にされており、複数のソケットを持つマシンでのみ使用してください。それによって、同時操作に大きく依存するJavaアプリケーションのパフォーマンスが向上します。Java HotSpot Server VMのみが、このオプションをサポートしています。
中止率に応じて、RTMロックを自動調整します。この率は、-XX:RTMAbortRatio
オプションによって指定されます。中止されたトランザクション数が中止率を超えた場合、ロックを含むメソッドがすべてのロックで標準のロックとして非最適化および再コンパイルされます。このオプションはデフォルトでは無効です。-XX:+UseRTMLocking
オプションを有効化する必要があります。
フォールバック・ハンドラとして標準のロック・メカニズムを使用して、展開されたすべてのロックに対してRestricted Transactional Memory (RTM)ロック・コードを生成します。このオプションはデフォルトでは無効です。RTMに関連するオプションは、Transactional Synchronization Extensions (TSX)をサポートするx86 CPU上のJava HotSpot Server VMに対してのみ使用可能です。
RTMは、x86命令セット拡張でマルチスレッド・アプリケーションの作成を容易にするIntelのTSXの一部です。RTMでは、新しい命令 XBEGIN
、XABORT
、XEND
およびXTEST
が導入されています。XBEGIN
およびXEND
命令は、トランザクションとして実行するための命令セットを囲みます。トランザクションの実行時に競合が見つからなかった場合、メモリーとレジスタの変更が、XEND
命令で同時にコミットされます。XABORT
命令ではトランザクションを明示的に中止でき、XEND
命令では命令セットがトランザクション内で実行中かどうかを確認できます。
トランザクションのロックは、別のスレッドが同じトランザクションにアクセスしようとしたときに展開されます。したがって、そのトランザクションへのアクセスを最初にリクエストしなかったスレッドはブロックされます。RTMでは、トランザクションが中止または失敗した場合のために、フォールバックの操作セットを指定する必要があります。RTMロックとは、TSXのシステムに委譲されているロックです。
RTMにより、重要なリージョンにおいて衝突が少なく競合度の高いロックのパフォーマンスが向上されます(これは、複数のスレッドによって同時にアクセスできないコードです)。また、RTMにより、粗粒度ロックのパフォーマンスも向上されますが、一般的にマルチスレッド・アプリケーションでのパフォーマンスはよくありません。(粗粒度ロックとは、ロックの取得および解放のオーバーヘッドを最小化するために長い期間ロックを保持する戦略であり、一方、細粒度ロックとは必要な場合のみロックし可能なかぎり早期にロック解除することで最大限の並行処理の達成を試みる戦略です。)さらに、異なるスレッドによって使用されている軽度な競合ロックの場合、RTMにより、誤ったキャッシュ・ライン共有(キャッシュ・ライン・ピンポンとも呼ばれる)を削減できます。これは、異なるプロセッサからの複数のスレッドが異なるリソースにアクセスしている場合に発生しますが、リソースは同じキャッシュ・ラインを共有します。結果として、プロセッサは他のプロセッサのキャッシュ・ラインを繰り返し無効にし、これにより、キャッシュではなくメイン・メモリーからの読取りが強制されます。
SPARCハードウェアのSHA暗号化ハッシュ関数のハードウェアベースの組込みを有効にします。UseSHA
は、UseSHA1Intrinsics
、UseSHA256Intrinsics
およびUseSHA512Intrinsics
オプションと組み合せて使用します。
UseSHA
およびUseSHA*Intrinsics
フラグはデフォルトで有効であり、SPARC T4以上のJava HotSpot Server VM 64ビットでのみサポートされます。
SHA操作に対してsun.security.provider.Sun
プロバイダを使用する場合のみ、この機能を適用できます。
すべてのハードウェアベースのSHA組込みを無効化するには、-XX:-UseSHA
を指定してください。特定のSHA組込みのみ無効化するには、適切な対応するオプションを使用してください。例: -XX:-UseSHA256Intrinsics
。
SHA-1暗号化ハッシュ関数の組込みを有効にします。
SHA-224およびSHA-256暗号化ハッシュ関数の組込みを有効にします。
SHA-384およびSHA-512暗号化ハッシュ関数の組込みを有効にします。
スカラー操作のスーパーワード操作への変換を有効にします。このオプションは、デフォルトで有効になっています。スカラー操作のスーパーワード操作への変換を無効にするには、-XX:-UseSuperWord
を指定します。Java HotSpot Server VMのみが、このオプションをサポートしています。
これらのオプションは、システム情報を収集し、詳細デバッグを実行する機能を提供します。
パフォーマンスに影響を与える、dtrace
ツールの追加のプローブを有効にします。デフォルトでは、このオプションは無効になっており、dtrace
は標準プローブだけを実行します。
java.lang.OutOfMemoryError
例外がスローされた場合に、ヒープ・プロファイラ(HPROF)を使用して、Javaヒープの現在のディレクトリ内のファイルへのダンプを有効にします。ヒープ・ダンプ・ファイルのパスと名前を明示的に設定するには、-XX:HeapDumpPath
オプションを使用します。デフォルトでは、このオプションは無効になっており、OutOfMemoryError
例外がスローされたときにヒープがダンプされません。
-XX:+HeapDumpOnOutOfMemoryError
オプションが設定されている場合に、ヒープ・プロファイラ(HPROF)によって提供されるヒープ・ダンプを書き込むパスとファイル名を設定します。デフォルトで、このファイルは現在の作業ディレクトリに作成され、java_pid
pid.hprof
と名付けられます。ここでpidはエラーを発生させたプロセスの識別子です。次の例では、デフォルトのファイルを明示的に設定する方法を示します(%p
は現在のプロセスの識別子を表します)。
-XX:HeapDumpPath=./java_pid%p.hprof
次の例は、ヒープ・ダンプ・ファイルを/var/log/java/java_heapdump.hprof
に設定する方法を示しています。
-XX:HeapDumpPath=/var/log/java/java_heapdump.hprof
ログ・データが書き込まれるパスとファイル名を設定します。デフォルトでは、ファイルは現在の作業ディレクトリに作成され、hotspot.log
と名付けられます。
次の例は、ログ・ファイルを/var/log/java/hotspot.log
に設定する方法を示しています。
-XX:LogFile=/var/log/java/hotspot.log
Control+C
イベント(SIGTERM
)後のクラス・インスタンス・ヒストグラムの出力を有効にします。デフォルトでは、このオプションは無効になっています。
このオプションを設定することは、jmap -histo
コマンドまたはjcmd
pid GC.class_histogram
コマンドを実行することと同等で、pidは現在のJavaプロセス識別子です。
[Control]+[C]
イベント(SIGTERM
)後にjava.util.concurrent
ロックの印刷を有効にします。デフォルトでは、このオプションは無効になっています。
このオプションを設定することは、jstack -l
コマンドまたはjcmd
pid Thread.print -l
コマンドを実行することと同等で、pidは現在のJavaプロセス識別子です。
JVMの診断目的のオプションをロック解除します。デフォルトでは、このオプションは無効になっており、診断オプションを使用できません。
これらのオプションはJava HotSpot VMによって実行されるガベージ・コレクション(GC)を制御します。
ガベージ・コレクションやForkJoinPoolなどの様々な操作に使用するスレッド・プールのサイズを計算するために、VMが使用するCPUの数をオーバーライドします。
通常、VMはオペレーティング・システムから使用可能なプロセッサの数を決定します。このフラグは、Dockerコンテナ内で複数のJavaプロセスを実行するときに、CPUリソースをパーティション化するために役立ちます。UseContainerSupport
が有効になっていない場合でも、このフラグが使用されます。コンテナのサポートの有効化および無効化の説明は、-XX:-UseContainerSupport
を参照してください。
Javaヒープ最適化を有効にします。これにより、コンピュータの構成(RAMおよびCPU)に基づいて、メモリーが集中的に割り当てられる長時間実行ジョブに最適になるように、各種パラメータを設定します。デフォルトでは、このオプションは無効になっており、ヒープは最適化されません。
JVM初期化時にJavaヒープ上のすべてのページのアクセスを有効にします。これにより、main()
メソッドに入る前に、すべてのページがメモリーに入れられます。このオプションは、すべての仮想メモリーを物理メモリーにマッピングして、長時間実行システムをシミュレートするテストで使用できます。デフォルトでは、このオプションは無効になっており、JVMヒープ領域がいっぱいになると、すべてのページがコミットされます。
コンカレント・マーク・スイープ(CMS)ガベージ・コレクタを使用した場合に、クラスのアンロードを有効にします。このオプションは、デフォルトで有効になっています。CMSガベージ・コレクタのクラスのアンロードを無効にするには、-XX:-CMSClassUnloadingEnabled
を指定します。
並行処理コレクションの統計のための指数平均の計算時に、現在のサンプルの重み付けに使用される時間のパーセンテージ(0から100)を設定します。デフォルトで、指数平均係数は25%に設定されます。次の例は、係数を15%に設定する方法を示しています。
-XX:CMSExpAvgFactor=15
CMSコレクション・サイクルを開始するOld世代の占有率(0から100)を設定します。デフォルト値は-1に設定されます。マイナスの値(デフォルトを含む)は-XX:CMSTriggerRatio
を使用して、開始の占有割合の値を定義することを意味します。
次の例は、占有の割合を20%に設定する方法を示しています。
-XX:CMSInitiatingOccupancyFraction=20
CMS remarkステップの前に清掃の試みを有効にします。デフォルトでは、このオプションは無効になっています。
CMSコレクション・サイクルの開始前に割り当てられる-XX:MinHeapFreeRatio
によって指定された値のパーセンテージ(0から100)を設定します。デフォルト値は80%に設定されます。
次の例は、占有の割合を75%に設定する方法を示しています。
-XX:CMSTriggerRatio=75
並行GCに使用されるスレッド数を設定します。デフォルト値は、JVMに使用可能なCPUの数によって異なります。
たとえば並行GCのスレッド数を2に設定するには、次のオプションを指定します。
-XX:ConcGCThreads=2
System.gc()
への呼出しの処理を無効にするオプションを有効にします。このオプションはデフォルトで無効にされ、System.gc()
の呼出しが処理されることを意味します。System.gc()
への呼出しの処理が無効にされている場合、JVMは引き続き必要に応じてGCを実行します。
System.gc()
要求を使用して、並行GCの呼出しを有効にします。このオプションはデフォルトで無効にされており、-XX:+UseConcMarkSweepGC
オプションと一緒の場合のみ有効にできます。
System.gc()
要求を使用して、並行GCの呼出しと並行GCサイクル時のクラスのアンロードを有効にします。このオプションはデフォルトで無効にされており、-XX:+UseConcMarkSweepGC
オプションと一緒の場合のみ有効にできます。
ガベージファースト(G1)コレクタを使用した場合に、Javaヒープが再分割される領域のサイズを設定します。この値は1Mバイトから32Mバイトまでで指定できます。デフォルトの領域サイズは、ヒープ・サイズに基づいて、エルゴノミクスに従って決定されます。
次の例は、再分割のサイズを16Mバイトに設定する方法を示しています。
-XX:G1HeapRegionSize=16m
割り当てられる領域とG1コレクタによって再生される領域に関する情報の出力を有効にします。デフォルトでは、このオプションは無効になっています。
G1コレクタの昇格の失敗の可能性を減らすために、失敗の上限として予約されるヒープのパーセンテージ(0から50)を設定します。デフォルトで、このオプションは10%に設定されます。
次の例は、予約されたヒープを20%に設定する方法を示しています。
-XX:G1ReservePercent=20
メモリー割当てプールの初期サイズ(バイト単位)を設定します。この値は0または1Mバイトより大きい1024の倍数にする必要があります。キロバイトを指定するには文字k
またはK
、メガバイトを指定するには文字m
またはM
、ギガバイトを指定するには文字g
またはG
を付けます。デフォルト値は、実行時にシステムの設定に基づいて選択されます。『Java SE HotSpot Virtual Machineガベージ・コレクション・チューニング・ガイド』(http://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/index.html
)のエルゴノミクスに関する項を参照してください。
次の例では、様々な単位を使用して、割り当てられたメモリーのサイズを6Mバイトに設定する方法を示します。
-XX:InitialHeapSize=6291456 -XX:InitialHeapSize=6144k -XX:InitialHeapSize=6m
このオプションを0に設定した場合、初期サイズは、Old世代とYoung世代に割り当てられたサイズの合計として設定されます。Young世代のヒープのサイズは、-XX:NewSize
オプションを使用して、設定できます。
-XX:MaxRAM
オプションで説明されているとおり、人間工学に基づくヒューリスティックを最大量の割合として適用する前に、JVMがJavaヒープに使用する初期のメモリー量を設定します。デフォルト値は1.5625%です。
次の例は、Javaヒープに使用される初期メモリー量の割合を設定する方法を示しています:
-XX:InitialRAMPercentage=5
スループット・ガベージ・コレクタ(これは-XX:+UseParallelGC
および-XX:+UseParallelOldGC
オプションによって有効にする)によって使用される初期Survivor領域率を設定します。適応型のサイズ変更は、-XX:+UseParallelGC
および-XX:+UseParallelOldGC
オプションを使用して、スループット・ガベージ・コレクタによってデフォルトで有効にされ、Survivor領域は、初期値から、アプリケーションの動作に従ってサイズ変更されます。適応型のサイズ変更が無効にされている場合(-XX:-UseAdaptiveSizePolicy
オプションを使用して)、-XX:SurvivorRatio
オプションを使用して、アプリケーションの全体の実行のSurvivor領域のサイズを設定してください。
次の公式を使用して、Young世代のサイズ(Y)に基づいて、Survivor領域の初期サイズ(S)と初期Survivor領域率(R)を計算できます。
S=Y/(R+2)
方程式の2は2つのSurvivor領域を示します。初期Survivor領域率として指定する値が大きいほど、初期Survivor領域のサイズが小さくなります。
デフォルトで初期Survivor領域率は8に設定されます。Young領域サイズにデフォルト値を使用する場合(2 MB)、Survivor領域の初期サイズは0.2 MBになります。
次の例は、初期Survivor領域率を4に設定する方法を示しています。
-XX:InitialSurvivorRatio=4
並行GCサイクルを開始するヒープ占有率(0から100)を設定します。これはいずれかの世代(G1ガベージ・コレクタなど)だけでなく、ヒープ全体の占有率に基づいて並行GCサイクルをトリガーするガベージ・コレクタによって使用されます。
デフォルトでは、開始値は45%に設定されます。0の値は無停止のGCサイクルを示します。次の例は、開始ヒープ占有率を75%に設定する方法を示しています。
-XX:InitiatingHeapOccupancyPercent=75
GCの最大一時停止時間(ミリ秒単位)の目標を設定します。これはソフト・ゴールのため、JVMはその実現のために最善の努力をします。デフォルトでは、最大一時停止時間値はありません。
次の例は、最大目標一時停止時間を500msに設定する方法を示しています。
-XX:MaxGCPauseMillis=500
メモリー割当てプールの最大サイズ(バイト単位)を設定します。この値は、1024の倍数で、2Mバイトより大きくなければなりません。キロバイトを指定するには文字k
またはK
、メガバイトを指定するには文字m
またはM
、ギガバイトを指定するには文字g
またはG
を付けます。デフォルト値は、実行時にシステムの設定に基づいて選択されます。サーバー配備の場合、-XX:InitialHeapSize
と-XX:MaxHeapSize
が同一の値に設定されていることがよくあります。『Java SE HotSpot Virtual Machineガベージ・コレクション・チューニング・ガイド』(http://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/index.html
)のエルゴノミクスに関する項を参照してください。
次の例では、様々な単位を使用して、割り当てられたメモリーの最大許容サイズを80Mバイトに設定する方法を示します。
-XX:MaxHeapSize=83886080 -XX:MaxHeapSize=81920k -XX:MaxHeapSize=80m
Oracle Solaris 7およびOracle Solaris 8 SPARCプラットフォームの場合の上限は、およそ4,000Mバイトからオーバーヘッドの量を引いたものです。Oracle Solaris 2.6およびx86プラットフォームの場合の上限は、およそ2,000Mバイトからオーバーヘッドの量を引いたものです。Linuxプラットフォームの場合の上限は、およそ2,000Mバイトからオーバーヘッドの量を引いたものです。
-XX:MaxHeapSize
オプションは-Xmx
と同等です。
GCイベント後の空きヒープ領域の最大許容率(0から100)を設定します。空きヒープ領域がこの値を超えて拡大した場合、ヒープが縮小されます。デフォルトで、この値は70%に設定されます。
次の例は、最大空きヒープ率を75%に設定する方法を示しています。
-XX:MaxHeapFreeRatio=75
クラス・メタデータに割当て可能なネイティブ・メモリーの最大量を設定します。デフォルトでは、サイズは無制限です。アプリケーションのメタデータの量は、アプリケーション自体、その他の実行中のアプリケーション、およびシステムで使用可能なメモリーの量によって異なります。
次の例は、最大クラス・メタデータ・サイズを256Mバイトに設定する方法を示しています。
-XX:MaxMetaspaceSize=256m
Young世代(ナーサリ)のヒープの最大サイズ(バイト単位)を設定します。デフォルト値はエルゴノミクスに従って設定されます。
-XX:MaxRAM
オプションで説明されているとおり、人間工学に基づくヒューリスティックを最大量の割合として適用する前に、JVMがJavaヒープに使用できるメモリーの最大量を設定します。デフォルト値は25%です。
このオプションを指定すると、このオプションと、メモリーの最大量に影響する他のオプションを組み合せた結果が、圧縮oopsでアドレス指定されたメモリーの範囲よりも大きい場合に、圧縮oopsの自動使用が無効になります。圧縮oopsの詳細は、-XX:UseCompressedOops
を参照してください。
次の例は、Javaヒープに使用されるメモリーの最大量の割合を設定する方法を示しています:
-XX:MaxRAMPercentage=75
適応型GCサイズ変更に使用する最大殿堂入りしきい値を設定します。最大値は15です。デフォルト値はパラレル(スループット)コレクタの場合15で、CMSコレクタの場合6です。
次の例は、最大殿堂入りしきい値を10に設定する方法を示しています。
-XX:MaxTenuringThreshold=10
初めて超えたときにガベージ・コレクションがトリガーされる、割り当てられるクラス・メタデータ領域のサイズを設定します。ガベージ・コレクションのこのしきい値は、使用されるメタデータの量に応じて増加または減少します。デフォルトのサイズはプラットフォームによって異なります。
GCイベント後の空きヒープ領域の最小許容率(0から100)を設定します。空きヒープ領域がこの値を下回った場合、ヒープが拡張されます。デフォルトで、この値は40%に設定されます。
次の例は、最小空きヒープ率を25%に設定する方法を示しています。
-XX:MinHeapFreeRatio=25
小さいヒープ用の-XX:MaxRAM
オプションで説明されているとおり、人間工学に基づくヒューリスティックを最大量の割合として適用する前に、JVMがJavaヒープに使用できるメモリーの最大量を設定します。小さいヒープは、約125 MBのヒープです。デフォルト値は50%です。
次の例は、小さいヒープ用のJavaヒープに使用されるメモリーの最大量の割合を設定する方法を示しています:
-XX:MinRAMPercentage=75
Young世代のサイズとOld世代のサイズの比率を設定します。デフォルトでは、このオプションは2に設定されます。次の例は、Young/Oldの比率を1に設定する方法を示しています。
-XX:NewRatio=1
Young世代(ナーサリ)のヒープの初期サイズ(バイト単位)を設定します。キロバイトを指定するには文字k
またはK
、メガバイトを指定するには文字m
またはM
、ギガバイトを指定するには文字g
またはG
を付けます。
ヒープのYoung世代領域は新しいオブジェクトに使用されます。この領域では他の領域よりも頻繁にGCが実行されます。Young世代のサイズが小さすぎる場合は、多数のマイナーGCが実行されます。サイズが高すぎる場合、完全GCのみが実行されますが、これは完了までに長い時間がかかることがあります。Oracleでは、Young世代のサイズをヒープ・サイズ全体の半分から4分の1の間に維持することをお薦めします。
次の例では、様々な単位を使用して、Young世代の初期サイズを256Mバイトに設定する方法を示します。
-XX:NewSize=256m -XX:NewSize=262144k -XX:NewSize=268435456
-XX:NewSize
オプションは-Xmn
と同等です。
Young世代とOld世代の、パラレル・ガベージ・コレクションに使用されるスレッド数を設定します。デフォルト値は、JVMに使用可能なCPUの数によって異なります。
たとえばパラレルGCのスレッド数を2に設定するには、次のオプションを指定します。
-XX:ParallelGCThreads=2
パラレル参照処理を有効にします。デフォルトでは、このオプションは無効になっています。
適応型世代サイズ変更に関する情報の出力を有効にします。デフォルトでは、このオプションは無効になっています。
すべてのGCでメッセージの出力を有効にします。デフォルトでは、このオプションは無効になっています。
最後の一時停止(GCの一時停止など)から経過した時間の出力を有効にします。デフォルトでは、このオプションは無効になっています。
一時停止(GCの一時停止など)が続いた時間の出力を有効にします。デフォルトでは、このオプションは無効になっています。
すべてのGCで日付スタンプの出力を有効にします。デフォルトでは、このオプションは無効になっています。
すべてのGCで詳細メッセージの出力を有効にします。デフォルトでは、このオプションは無効になっています。
個々のすべてのGCワーカー・スレッド・タスクのタイム・スタンプの出力を有効にします。デフォルトでは、このオプションは無効になっています。
すべてのGCでのタイムスタンプの出力を有効にします。デフォルトでは、このオプションは無効になっています。
詳細な重複除外統計を印刷します。デフォルトでは、このオプションは無効になっています。-XX:+UseStringDeduplication
オプションを参照してください。
殿堂入りの年齢情報の出力を有効にします。次は、出力例です。
Desired survivor size 48286924 bytes, new threshold 10 (max 10) - age 1: 28992024 bytes, 28992024 total - age 2: 1366864 bytes, 30358888 total - age 3: 1425912 bytes, 31784800 total ...
年齢1のオブジェクトはもっとも若いSurvivorです(それらは前回の清掃後に作成されたもの、最後の清掃で残ったもの、EdenからSurvivor領域に移動されたものです)。年齢2のオブジェクトは2回の清掃で残ったものです(2回目の清掃で、それらはあるSurvivor領域から次の領域にコピーされました)。その他。
前の例で、28 992 024バイトが1回の清掃で残り、EdenからSurvivor領域にコピーされ、1 366 864バイトが年齢2のオブジェクトで占有されているというようになります。各行の3番目の値は年齢n以下のオブジェクトの累積サイズです。
デフォルトでは、このオプションは無効になっています。
各フルGCの前にYoung世代のGCを有効にします。このオプションは、デフォルトで有効になっています。フルGCの前にYoung世代を清掃することによって、Old世代の領域からYoung世代の領域に到達可能なオブジェクト数を削減できるため、Oracleではそれを無効にしないことをお薦めします。各フルGCの前にYoung世代のGCを無効にするには、-XX:-ScavengeBeforeFullGC
を指定します。
ソフトに到達可能なオブジェクトが最後に参照された後にヒープで有効なまま維持される時間の量(ミリ秒単位)を設定します。デフォルト値は、ヒープ内の空きメガバイト当たり1秒の寿命です。-XX:SoftRefLRUPolicyMSPerMB
オプションは、現在のヒープ・サイズ(Java HotSpot Client VMの場合)または最大許容ヒープ・サイズ(Java HotSpot Server VMの場合)の1メガバイト当たりのミリ秒を表す整数値を受け付けます。この違いは、Client VMがヒープを拡大するより、ソフト参照をフラッシュする傾向があり、Server VMがソフト参照をフラッシュするより、ヒープを拡大する傾向があることを意味します。後者の場合、-Xmx
オプションの値は、ソフト参照がガベージ・コレクションされる速さに大きく影響します。
次の例は、値を2.5秒に設定する方法を示しています。
-XX:SoftRefLRUPolicyMSPerMB=2500
指定した期間に到達しつつあるString
オブジェクトは、重複除外の候補とみなされます。オブジェクトの期間は、オブジェクトがガベージ・コレクションで存続した回数の測定値です。これは、殿堂入りと呼ばれる場合もあります。-XX:+PrintTenuringDistribution
オプションを参照してください。この期間に到達する前に古いヒープ・リージョンに昇格されたString
オブジェクトは、常に重複除外の候補とみなされます。このオプションのデフォルト値は3
です。-XX:+UseStringDeduplication
オプションを参照してください。
Eden領域サイズとSurvivor領域サイズの比率を設定します。デフォルトでは、このオプションは8に設定されます。次の例は、Eden/Survivor領域率を4に設定する方法を示しています。
-XX:SurvivorRatio=4
Youngガベージ・コレクション後に使用されるSurvivor領域の目的のパーセンテージ(0から100)を設定します。デフォルトで、このオプションは50%に設定されます。
次の例は、ターゲットのSurvivor領域率を30%に設定する方法を示しています。
-XX:TargetSurvivorRatio=30
スレッドローカル割当てバッファ(TLAB)の初期サイズ(バイト単位)を設定します。キロバイトを指定するには文字k
またはK
、メガバイトを指定するには文字m
またはM
、ギガバイトを指定するには文字g
またはG
を付けます。このオプションが0に設定されている場合、JVMは初期サイズを自動的に選択します。
次の例は、初期TLABサイズを512Kバイトに設定する方法を示しています。
-XX:TLABSize=512k
適応型世代サイズ変更の使用を有効にします。このオプションは、デフォルトで有効になっています。適応型世代サイズ変更を無効にするには、-XX:-UseAdaptiveSizePolicy
を指定し、メモリー割当てプールのサイズを明示的に設定します(-XX:SurvivorRatio
オプションを参照)。
CMSコレクタの開始の唯一の基準として、占有率値の使用を有効にします。デフォルトでは、このオプションは無効になっており、その他の基準を使用できます。
Old世代のCMSガベージ・コレクタの使用を有効にします。スループット(-XX:+UseParallelGC
)ガベージ・コレクタによってアプリケーションの待機時間要件を満たすことができない場合、OracleではCMSガベージ・コレクタを使用することをお薦めします。G1ガベージ・コレクタ(-XX:+UseG1GC
)は別の代替方法です。
デフォルトで、このオプションは無効にされており、マシンの構成とJVMのタイプに基づいて、コレクタが自動的に選択されます。このオプションが有効にされている場合、-XX:+UseParNewGC
オプションが自動的に設定されますが、それは無効にしてください。-XX:+UseConcMarkSweepGC -XX:-UseParNewGC
のオプションの組合わせはJDK 8で非推奨になったためです。
ガベージファースト(G1)・ガベージ・コレクタの使用を有効にします。それは、大容量のRAMを搭載するマルチプロセッサ・マシンを対象とした、サーバースタイル・ガベージ・コレクタです。GC一時停止時間目標を高い確率で満たしながら、優れたスループットを維持します。大きなヒープ(およそ6Gバイト以上のサイズ)を必要とし、GC待機時間の制限の要件(0.5秒未満の安定した予測可能な一時停止時間)のあるアプリケーションには、G1コレクタをお薦めします。
デフォルトで、このオプションは無効にされており、マシンの構成とJVMのタイプに基づいて、コレクタが自動的に選択されます。
OutOfMemoryError
例外がスローされるまでに、GCへのJVMによって費やされる時間の割合を制限するポリシーを使用できます。このオプションはデフォルトで有効にされ、合計時間の98%がガベージ・コレクションで費やされ、復元されるヒープが2%未満である場合に、パラレルGCはOutOfMemoryError
をスローします。ヒープが小さい場合、この機能は、アプリケーションが長時間ほとんどまたはまったく進捗なしで実行することを防ぐために使用できます。このオプションを無効にするには、-XX:-UseGCOverheadLimit
を指定します。
アプリケーションの待機時間の短いメモリーの使用を増やすことで、NUMA (Non-Uniform Memory Architecture)を使用したマシン上のアプリケーションのパフォーマンスの最適化を有効にします。デフォルトでは、このオプションは無効になっており、NUMAの最適化は行われません。このオプションは、パラレル・ガベージ・コレクタが使用されている場合(-XX:+UseParallelGC
)にのみ使用できます。
複数のプロセッサを利用することによってアプリケーションのパフォーマンスを向上させるために、Parallel Scavengeガベージ・コレクタ(スループット・コレクタとも呼ばれる)の使用を有効にします。
デフォルトで、このオプションは無効にされており、マシンの構成とJVMのタイプに基づいて、コレクタが自動的に選択されます。これを有効にすると、-XX:+UseParallelOldGC
オプションも明示的に無効にしないかぎりは自動的に有効になります。
フルGCのパラレル・ガベージ・コレクタの使用を有効にします。デフォルトでは、このオプションは無効になっています。それを自動的に有効にすると、-XX:+UseParallelGC
オプションが有効になります。
Young世代のコレクションにパラレル・スレッドの使用を有効にします。デフォルトでは、このオプションは無効になっています。-XX:+UseConcMarkSweepGC
オプションを設定すると、それが自動的に有効になります。-XX:+UseConcMarkSweepGC
オプションを使用せずに-XX:+UseParNewGC
オプションを使用することは、JDK 8で非推奨になりました。
シリアル・ガベージ・コレクタの使用を有効にします。これは一般に、ガベージ・コレクションの特別な機能を必要としない小さく単純なアプリケーションには最適な選択です。デフォルトで、このオプションは無効にされており、マシンの構成とJVMのタイプに基づいて、コレクタが自動的に選択されます。
Linuxでは、JVMで共有メモリーを使用してラージ・ページを設定できるようにします。
詳細は、「ラージ・ページ」を参照してください。
文字列の重複除外を有効化します。デフォルトでは、このオプションは無効になっています。このオプションを使用するには、ガベージファースト(G1)・ガベージ・コレクタを有効にする必要があります。-XX:+UseG1GC
オプションを参照してください。
多くのStringオブジェクトが同じであるということから、String deduplication
により、Javaヒープ上のString
オブジェクトのメモリー・フットプリントが削減されます。各String
オブジェクトが独自の文字配列をポイントするのではなく、同一のString
オブジェクトは同じ文字配列をポイントし共有できます。
Young世代の領域で、スレッドローカル割当てブロック(TLAB)の使用を有効にします。このオプションは、デフォルトで有効になっています。TLABの使用を無効にするには-XX:-UseTLAB
を指定します。
これらのオプションは前のリリースに含まれていましたが、その後不要とみなされました。
インクリメンタル・ガベージ・コレクションを有効にします。このオプションは置換えなくJDK 8で非推奨になりました。
指定したデバッグ/プロファイリング・ライブラリをロードします。このオプションは-agentlib
オプションによって置き換えられました。
並行コレクタが実行を許可されるマイナー・コレクション間の時間のパーセンテージ(0から100)を設定します。-XX:+CMSIncrementalMode
オプションの非推奨に続いて、このオプションは置換えなくJDK 8で非推奨になりました。
-XX:+CMSIncrementalPacing
が有効にされている場合に、デューティ・サイクルの下限であるマイナー・コレクション間の時間のパーセンテージ(0から100)を設定します。-XX:+CMSIncrementalMode
オプションの非推奨に続いて、このオプションは置換えなくJDK 8で非推奨になりました。
CMSコレクタのインクリメンタル・モードを有効にします。CMSIncremental
から始まるその他のオプションと一緒に、このオプションは置換えなくJDK 8で非推奨になりました。
インクリメンタル・モード・デューティ・サイクルがマイナー・コレクション間の期間内に右側に移動される時間のパーセンテージ(0から100)を設定します。-XX:+CMSIncrementalMode
オプションの非推奨に続いて、このオプションは置換えなくJDK 8で非推奨になりました。
JVMの実行中に収集された統計情報に基づいたインクリメンタル・モード・デューティ・サイクルの自動調整を有効にします。-XX:+CMSIncrementalMode
オプションの非推奨に続いて、このオプションは置換えなくJDK 8で非推奨になりました。
デューティ・サイクルの計算時に、保守性を追加するために使用される時間(0から100)のパーセンテージを設定します。-XX:+CMSIncrementalMode
オプションの非推奨に続いて、このオプションは置換えなくJDK 8で非推奨になりました。
GCを起動するPermanent世代の占有率(0から100)を設定します。このオプションは置換えなくJDK 8で非推奨になりました。
Permanent世代領域の最大サイズ(バイト単位)を設定します。このオプションはJDK 8で非推奨になり、-XX:MaxMetaspaceSize
オプションによって置き換えられました。
超えた場合にガベージ・コレクションがトリガーされる、Permanent世代に割り当てられる領域(バイト単位)を設定します。このオプションはJDK 8で非推奨になり、-XX:MetaspaceSize
オプションによって置き換えられました。
検証プロセスの分割を有効にします。デフォルトで、このオプションは前のリリースで有効にされており、検証は型参照(コンパイラによって実行)と型チェック(JVMランタイムによって実行)の2つのフェーズに分割されていました。このオプションはJDK 8で非推奨になり、検証はデフォルトで分割され、それを無効にする方法はなくなりました。
一般的に割り当てられる文字列のキャッシュを有効にします。このオプションは置換えなくJDK 8から削除されました。
ヒュージ・ページとも呼ばれるラージ・ページは、標準のメモリー・ページ・サイズ(プロセッサおよびオペレーティング・システムによって異なります)よりはるかに大きいメモリー・ページです。ラージ・ページは、プロセッサのTranslation-Lookaside Bufferを最適化します。
Translation-Lookaside Buffer (TLB)は、最近使用された仮想から物理へのアドレス変換を保持するページ変換キャッシュです。TLBは、少ないシステム・リソースです。プロセッサが複数のメモリー・アクセスが必要な場合のある階層ページ表から読み取る必要があるため、TLBミスは負荷がかかる可能性があります。大きいメモリー・ページ・サイズを使用して、単一のTLBエントリで大きいメモリー範囲を表すことができます。TLB不足が少なくなり、メモリー集約型のアプリケーションのパフォーマンスが向上する可能性があります。
ただし、ラージ・ページのページ・メモリーは、システムのパフォーマンスに悪影響を与える場合があります。たとえば、大量のメモリーがアプリケーションで確保される場合、通常メモリー不足や他のアプリケーションの過剰なページングが発生し、システム全体が遅くなる可能性があります。また、長時間稼働しているシステムは、過剰な断片化が発生する可能性があります。これにより、十分な大きさのページ・メモリーを予約できない可能性があります。これが発生した場合、OSまたはJVMのいずれかが通常のページの使用に戻ります。
SolarisおよびLinuxは、ラージ・ページをサポートします。
Solaris
Solaris 9以上には、Multiple Page Size Support(MPSS)が含まれています。追加の構成は必要ありません。http://www.oracle.com/technetwork/server-storage/solaris10/overview/solaris9-features-scalability-135663.html
を参照してください。
Linux
2.6カーネルは、ラージ・ページをサポートします。一部のベンダーは、2.4ベースのリリースのコードをバックポートしています。システムがラージ・ページ・メモリーをサポートしているかどうかを確認するには、次を試行してください:
# cat /proc/meminfo | grep Huge HugePages_Total: 0 HugePages_Free: 0 Hugepagesize: 2048 kB
出力に3つの"Huge"変数が示されている場合、システムはラージ・ページ・メモリーをサポートしていますが、構成する必要があります。コマンドが何も出力しない場合、システムはラージ・ページをサポートしていません。ラージ・ページ・メモリーを使用するシステムを構成するには、root
としてログインして、次のステップを実行してください:
オプション-XX:+UseSHM
(-XX:+UseHugeTLBFS
のかわり)を使用する場合、SHMMAX
値を増やしてください。Javaヒープ・サイズより大きくする必要があります。4GB以下の物理RAMを使用したシステムで、次によりすべてのメモリーが共有可能になります:
# echo 4294967295 > /proc/sys/kernel/shmmax
オプション-XX:+UseSHM
または-XX:+UseHugeTLBFS
を使用する場合、ラージ・ページの数を指定してください。次の例では、4GBシステムの3GBがラージ・ページに予約されます(2048KBのラージ・ページ・サイズを仮定する場合、3GB = 3 * 1024MB = 3072MB = 3072 * 1024KB = 3145728KB and 3145728KB / 2048KB = 1536):
# echo 1536 > /proc/sys/vm/nr_hugepages
注:
|
アプリケーション・クラス・データ共有(AppCDS)は、CDS(https://docs.oracle.com/javase/8/docs/technotes/guides/vm/class-data-sharing.html
を参照)を拡張して標準拡張ディレクトリのクラスを有効化し(システム・プロパティjava.ext.dirs
で指定。https://docs.oracle.com/javase/8/docs/technotes/guides/extensions/spec.html
を参照)、アプリケーション・クラス・パスを共有アーカイブに配置できるようにします(「クラス・パスの設定」を参照)。AppCDSは、相当数のクラスがアプリケーション・クラス・パスからロードされるという条件下で、フットプリントを低減し、アプリケーション起動時間を短縮します。
これは、-XX:+UnlockCommercialFeatures
オプションを同時に指定する必要がある商用機能です。これは実験的な機能でもあり、今後のリリースで変更される場合があります。
次のステップで、test.Hello
アプリケーションで使用されるすべてのクラスを含む共有アーカイブ・ファイルを作成します。最後のステップで、共有アーカイブ・ファイルを持つアプリケーションを実行します。
test.Hello
アプリケーションで使用されるすべてのクラスのリストを作成します。次のコマンドは、このアプリケーションで使用されるすべてのクラスのリストを含む、hello.classlist
という名前のファイルを作成します。
java -Xshare:off -XX:+UnlockCommercialFeatures -XX:DumpLoadedClassList=hello.classlist -XX:+UseAppCDS -cp hello.jar test.Hello
-cp
パラメータがJARファイルのみを含む必要がある点に注意してください。-XX:+UseAppCDS
オプションは、ディレクトリ名を含むクラス・パスをサポートしません。
hello.classlist
内のすべてのクラスを含む、hello.jsa
という名前の共有アーカイブを作成します。
java -XX:+UnlockCommercialFeatures -Xshare:dump -XX:+UseAppCDS -XX:SharedArchiveFile=hello.jsa -XX:SharedClassListFile=hello.classlist -cp hello.jar
アーカイブ作成時に使用された-cp
パラメータは、実行時に使用された-cp
と同一(または、その接頭辞)である必要があることに注意してください。
共有アーカイブhello.jsa
を持つアプリケーションtest.Hello
を実行します。
java -XX:+UnlockCommercialFeatures -Xshare:on -XX:+UseAppCDS -XX:SharedArchiveFile=hello.jsa -cp hello.jar test.Hello
オプション-Xshare:on
または-Xshare:auto
を指定したことを確認します。
test.Hello
アプリケーションが、hello.jsa
共有アーカイブに含まれるクラスを使用していることを確認します。
java -XX:+UnlockCommercialFeatures -Xshare:on -XX:+UseAppCDS -XX:SharedArchiveFile=hello.jsa -cp hello.jar -verbose:class test.Hello
このコマンドの出力は、次のテキストを含んでいる必要があります。
Loaded test.Hello from shared objects file by sun/misc/Launcher$AppClassLoader
正確に同じクラス・パスを持っているか、共通のクラス・パス接頭辞を共有する、複数のアプリケーション・プロセス全体で、同じアーカイブ・ファイルを共有できます。アーカイブはプロセスのアドレス空間にメモリー・マップされるため、これによりメモリー使用量が低下します。オペレーティング・システムは、これらのプロセス全体で読取り専用ページを自動的に共有します。
次のステップでは、アプリケーションHello
およびHi
が使用できる共有アーカイブを作成します。
Hello
アプリケーションで使用されるすべてのクラスのリストと、Hi
アプリケーションに関する別のリストを作成します。
java -XX:+UnlockCommercialFeatures -XX:DumpLoadedClassList=hello.classlist -XX:+UseAppCDS -cp common.jar:hello.jar Hello
java -XX:+UnlockCommercialFeatures -XX:DumpLoadedClassList=hi.classlist -XX:+UseAppCDS -cp common.jar:hi.jar Hi
Hello
およびHi
アプリケーションは、共通のクラス・パス接頭辞を共有しているため(クラス・パスはどちらもcommon.jar
で始まります)、これらの2つのアプリケーションは1つの共有アーカイブ・ファイルを共有できます。
共有アーカイブ・ファイルを共有するすべてのアプリケーションで使用されるクラスの単一のリストを作成します。
次のコマンドは、ファイルhello.classlist
およびhi.classlist
を、1つのファイルcommon.classlist
に結合します。
cat hello.classlist hi.classlist > common.classlist
common.classlist
内のすべてのクラスを含む、common.jsa
という名前の共有アーカイブを作成します。
java -XX:+UnlockCommercialFeatures -Xshare:dump -XX:SharedArchiveFile=common.jsa -XX:+UseAppCDS -XX:SharedClassListFile=common.classlist -cp common.jar
-cp
パラメータの値は、Hello
およびHi
アプリケーションで共有される共通のクラス・パス接頭辞です。
同一の共有アーカイブを持つHello
およびHi
アプリケーションを実行します。
java -XX:+UnlockCommercialFeatures -Xshare:on -XX:SharedArchiveFile=common.jsa -XX:+UseAppCDS -cp common.jar:hello.jar Hello
java -XX:+UnlockCommercialFeatures -Xshare:on -XX:SharedArchiveFile=common.jsa -XX:+UseAppCDS -cp common.jar:hi.jar Hi