Java Platform, Standard Editionツール・リファレンス
目次      

java

Javaアプリケーションを起動します。

形式

java [options] classname [args]

java [options] -jar filename [args]

options

スペースで区切ったコマンド行オプション。「オプション」を参照してください。

classname

起動するクラスの名前。

filename

呼び出されるJavaアーカイブ(JAR)ファイルの名前。-jarオプションと一緒にのみ使用されます。

args

スペースで区切られた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バイトに設定するには、引数として、8g8192m8388608kまたは8589934592と指定できます。パーセンテージを指定する必要がある場合は、0から1の数値を使用します(たとえば、25%の場合0.25と指定する)。

標準オプション

これらは、JVMのすべての実装でサポートされるもっとも一般的に使われるオプションです。

-agentlib:libname[=options]

指定したネイティブ・エージェント・ライブラリをロードします。ライブラリ名の後に、ライブラリに固有のオプションのカンマ区切りのリストを使用できます。

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

ネイティブ・エージェント・ライブラリの詳細は、次を参照してください。

-agentpath:pathname[=options]

絶対パス名で指定されたネイティブ・エージェント・ライブラリをロードします。このオプションは-agentlibと同等ですが、ライブラリのフル・パスとファイル名を使用します。

-client

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

-Dproperty=value

システム・プロパティの値を設定します。property変数はプロパティの名前を表すスペースなしの文字列です。value変数はプロパティの値を表す文字列です。valueがスペースのある文字列の場合、それを引用符で囲みます(-Dfoo="foo bar"など)。

-d32

32ビット環境でアプリケーションを実行します。32ビット環境がインストールされていないかサポートされていない場合は、エラーが報告されます。デフォルトでは、64ビット・システムを使用していないかぎり、アプリケーションは32ビット環境で実行されます。

-d64

64ビット環境でアプリケーションを実行します。64ビット環境がインストールされていないかサポートされていない場合は、エラーが報告されます。デフォルトでは、64ビット・システムを使用していないかぎり、アプリケーションは32ビット環境で実行されます。

現在のところ、Java HotSpot Server VMだけが64ビットの操作をサポートしており、-d64を使用すると-serverオプションが暗黙的に有効になります。-d64使用時には-clientオプションは無視されます。この仕様は、将来のリリースでは変更になる可能性があります。

-disableassertions[:[packagename]...|:classname]
-da[:[packagename]...|:classname]

アサーションを無効にします。デフォルトでは、すべてのパッケージとクラスでアサーションは無効になっています。

引数なしで、-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
-disablesystemassertions
-dsa

すべてのシステム・クラス内でアサーションを無効にします。

-enableassertions[:[packagename]...|:classname]
-ea[:[packagename]...|:classname]

アサーションを有効にします。デフォルトでは、すべてのパッケージとクラスでアサーションは無効になっています。

引数なしで、-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
-enablesystemassertions
-esa

すべてのシステム・クラス内でアサーションを有効にします。

-help
-?

実際にJVMを実行せずに、javaコマンドの使用情報を表示します。

-jar filename

JARファイルにカプセル化されたプログラムを実行します。filename引数は、アプリケーションの開始位置として機能するpublic static void main(String[] args)メソッドによってクラスを定義する、Main-Class:classnameの形式の行を含むマニフェストのあるJARファイルの名前です。

-jarオプションを使用すると、指定したJARファイルがすべてのユーザー・クラスのソースになり、他のクラス・パスの設定は無視されます。

JARファイルの詳細は、次のリソースを参照してください。

-javaagent:jarpath[=options]

指定したJavaプログラミング言語エージェントをロードします。Javaアプリケーションの計測の詳細については、Java APIドキュメントのjava.lang.instrumentパッケージの説明(http://docs.oracle.com/javase/jp/8/api/java/lang/instrument/package-summary.html)を参照してください。

-jre-restrict-search

ユーザーのプライベートJREをバージョン検索に含めます。

-no-jre-restrict-search

ユーザーのプライベートJREをバージョン検索から除外します。

-server

Java HotSpot Server VMを選択します。JDKの64ビット・バージョンはServer VMのみをサポートしているため、その場合のオプションは暗黙的です。

デフォルトのJVMの選択については、次のServer-Classマシンの検出に関するページを参照してください。
http://docs.oracle.com/javase/jp/8/technotes/guides/vm/server-class.html

-showversion

バージョン情報を表示してアプリケーションの実行を続行します。このオプションは、-versionオプションと同等ですが、後者はJVMにバージョン情報の表示後終了するように指示する点が異なります。

-splash:imgname

imgnameに指定された画像を含むスプラッシュ画面を表示します。たとえば、アプリケーションの起動時に、imagesディレクトリのsplash.gifファイルを表示するには、次のオプションを使用します。

-splash:images/splash.gif
-verbose:class

ロードされる各クラスに関する情報を表示します。

-verbose:gc

各ガベージ・コレクション(GC)イベントに関する情報を表示します。

-verbose:jni

ネイティブ・メソッドおよびその他のJava Native Interface (JNI)アクティビティの使用に関する情報を表示します。

-version

バージョン情報を表示して終了します。このオプションは、-showversionオプションと同等ですが、後者はJVMにバージョン情報の表示後終了するように指示する点が異なります。

-version:release

アプリケーションの実行に使用するリリース・バージョンを指定します。呼び出された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

使用可能なすべての-Xオプションのヘルプを表示します。

-Xbatch

バックグラウンド・コンパイルを無効にします。デフォルトで、JVMは、メソッドをバックグラウンド・タスクとしてコンパイルし、バックグラウンド・コンパイルが終了するまでインタプリタ・モードでメソッドを実行します。-Xbatchフラグは、バックグラウンド・コンパイルを無効にするため、すべてのメソッドのコンパイルが完了するまでフォアグラウンド・タスクとして処理されます。

このオプションは-XX:-BackgroundCompilationと同等です。

-Xbootclasspath:path

ブート・クラス・ファイルを探すディレクトリ、JARファイル、およびZIPアーカイブをコロン(:)で区切ったリストで指定します。それらが、JDKに含まれるブート・クラス・ファイルの代わりに使用されます。

rt.jar内のクラスをオーバーライドするためにこのオプションを使用するアプリケーションは配備しないでください。これはJRE バイナリ・コード・ライセンス違反になります。

-Xbootclasspath/a:path

ディレクトリ、JARファイル、およびZIPアーカイブをコロン(:)で区切ったリストで指定します。これらはデフォルトのブートストラップ・クラス・パスの後に追加されます。

rt.jar内のクラスをオーバーライドするためにこのオプションを使用するアプリケーションは配備しないでください。これはJRE バイナリ・コード・ライセンス違反になります。

-Xbootclasspath/p:path

ディレクトリ、JARファイル、およびZIPアーカイブをコロン(:)で区切ったリストで指定します。これらはデフォルトのブートストラップ・クラス・パスの前に追加されます。

rt.jar内のクラスをオーバーライドするためにこのオプションを使用するアプリケーションは配備しないでください。これはJRE バイナリ・コード・ライセンス違反になります。

-Xcheck:jni

Java Native Interface (JNI)機能に対して追加チェックを行います。具体的には、それはJNI要求を処理する前に、JNI関数に渡されるパラメータと、実行時環境データを検証します。無効なデータが見つかった場合は、ネイティブ・コードに問題があることを示しており、その場合に、JVMは回復不能なエラーを発生して終了します。このオプションを使用すると、パフォーマンス低下が予想されます。

-Xcomp

最初の呼出しで、メソッドのコンパイルを強制的に実行します。デフォルトで、クライアントVM (-client)は1,000回の解析対象メソッドの呼出しを実行し、サーバーVM (-server)は10,000回の解析対象メソッドの呼出しを実行して、効率的なコンパイルのための情報を収集します。-Xcompオプションを指定すると、解析対象メソッドの呼出しを無効にするため、効率性と引き換えにコンパイルのパフォーマンスが向上します。

-XX:CompileThresholdオプションを使用して、コンパイル前の解析対象メソッドの呼出し数を変更することもできます。

-Xdebug

何も行いません。下位互換性を維持するために提供されています。

-Xdiag

追加の診断メッセージを表示します。

-Xfuture

クラスファイル形式の仕様への厳密な準拠を適用するクラスファイル形式の厳密なチェックを有効にします。将来のリリースでは、より厳密なチェックがデフォルトになるため、新しいコードを開発するときにはこのフラグを使用することをお薦めします。

-Xint

インタプリタ専用モードでアプリケーションを実行します。ネイティブ・コードへのコンパイルは無効になり、すべてのバイト・コードがインタプリタによって実行されます。Just-In-Time (JIT)コンパイラが提供するパフォーマンス上の利点は、このモードでは実現されません。

-Xinternalversion

-versionオプションよりも詳しいJVMバージョン情報を表示して、終了します。

-Xloggc:filename

ロギングのため、詳細GCイベント情報をリダイレクトするファイルを設定します。このファイルに書き込まれる情報は、ロギングされた各イベントの前の最初のGCイベントから経過した時間での-verbose:gcの出力と似ています。同じjavaコマンドで両方が指定された場合に、-Xloggcオプションは、-verbose:gcをオーバーライドします。

例:

-Xloggc:garbage-collection.log
-Xmaxjitcodesize=size

JITでコンパイルされたコードの最大コード・キャッシュ・サイズ(バイト単位)を指定します。キロバイトを指定するには文字kまたはK、メガバイトを指定するには文字mまたはM、ギガバイトを指定するには文字gまたはGを付けます。デフォルトの最大コード・キャッシュ・サイズは240MBです。オプション-XX:-TieredCompilationを使用して階層化コンパイルを無効にした場合、デフォルトのサイズは48MBです。

-Xmaxjitcodesize=240m

このオプションは-XX:ReservedCodeCacheSizeと同等です。

-Xmixed

ネイティブ・コードにコンパイルされるホット・メソッドを除くすべてのバイトコードをインタプリタによって実行します。

-Xmnsize

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を使用して、最大サイズを設定できます。

-Xmssize

ヒープの初期サイズ(バイト単位)を設定します。この値は、1024の倍数で1Mバイトより大きくなければなりません。キロバイトを指定するには文字kまたはK、メガバイトを指定するには文字mまたはM、ギガバイトを指定するには文字gまたはGを付けます。

次の例では、様々な単位を使用して、割り当てられたメモリーのサイズを6Mバイトに設定する方法を示します。

-Xms6291456
-Xms6144k
-Xms6m

このオプションを設定しない場合、初期サイズは、Old世代とYoung世代に割り当てられたサイズの合計として設定されます。Young世代のヒープの初期サイズは、-Xmnオプションまたは-XX:NewSizeオプションを使用して設定できます。

-Xmxsize

メモリー割当てプールの最大サイズ(バイト単位)を指定します。この値は、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と同等です。

-Xnoclassgc

クラスのガベージ・コレクション(GC)を無効にします。これによりいくらかのGC時間が節約され、アプリケーション実行時の割込みが短くなります。

起動時に-Xnoclassgcを指定すると、GC時にアプリケーションのクラス・オブジェクトがそのままの状態にされ、常に有効であるとみなされます。これにより、多くのメモリーが永続的に占有されることになるため、慎重に使用しないと、メモリー不足の例外がスローされます。

-Xprof

実行中のプログラムのプロファイルを生成し、プロファイル・データを標準出力に出力します。このオプションは、プログラム開発で役立つユーティリティとして提供されており、本番稼動システムでの使用を目的としたものではありません。

-Xrs

JVMによるオペレーティング・システム・シグナルの使用を減らします。

シャットダウン・フックにより、JVMが突然終了した場合でも、シャットダウン時にユーザー・クリーン・アップコード(データベース接続のクローズなど)を実行して、Javaアプリケーションの正常なシャットダウンができるようになりました。

JVMは、シグナルをキャッチすることによって、異常終了のためのシャットダウン・フックを実装します。JVMは、SIGHUPSIGINT、およびSIGTERMを使用して、シャットダウン・フックの実行を開始します。

JVMは、デバッグ用のスレッド・スタックをダンプする機能を実現するためにも、同様のメカニズムを使用します。JVMは、スレッド・ダンプを実行するためにSIGQUITを使用します。

JVMを埋め込んでいるアプリケーションがSIGINTSIGTERMなどのシグナルを頻繁にトラップする必要があると、JVMのシグナル・ハンドラの処理に支障が出る可能性があります。-Xrsオプションを使用すると、この問題に対処できます。-Xrsを使用すると、SIGINTSIGTERMSIGHUP、およびSIGQUITに対するシグナル・マスクはJVMによって変更されず、これらのシグナルに対するシグナル・ハンドラはインストールされません。

-Xrsを指定した場合は、2つの影響があります。

  • SIGQUITによるスレッド・ダンプを利用できない。

  • シャットダウン・フックの実行は、JVMが終了しようとしている時点でSystem.exit()を呼び出すなどして、ユーザー・コード側で行います。

-Xshare:mode

クラス・データ共有(CDS)モードを設定します。このオプションのmode引数には次を指定できます。

auto

可能な場合は、CDSを使用します。これはJava HotSpot 32-Bit Client VMのデフォルト値です。

on

CDSの使用が必須です。クラス・データ共有を使用できない場合は、エラー・メッセージを出力し、終了します。

off

CDSは使用しないでください。これはJava HotSpot 32-Bit Server VM、Java HotSpot 64-Bit Client VMおよびJava HotSpot 64-Bit Server VMのデフォルト値です。

dump

CDSアーカイブを手動で生成します。「クラス・パスの設定」の説明に従って、アプリケーション・クラス・パスを指定します。

新しいJDKリリースを使用してCDSアーカイブを再生成する必要があります。

-XshowSettings:category

設定を表示し、続行します。このオプションのcategory引数には次を指定できます。

all

設定のすべてのカテゴリを表示します。これがデフォルト値です。

locale

ロケールに関連する設定を表示します。

properties

システム・プロパティに関連する設定を表示します。

vm

JVMの設定を表示します。

-Xsssize

スレッド・スタック・サイズ(バイト単位)を設定します。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と同等です。

-Xusealtsigs

JVM内部シグナルとして、SIGUSR1およびSIGUSR2のかわりに代替シグナルを使用します。このオプションは-XX:+UseAltSigsと同等です。

-Xverify:mode

バイトコード・ベリファイアのモードを設定します。バイトコード検証では、クラス・ファイルの形式が正しく、Java仮想マシンの仕様のセクション4.10、classファイルの検証に関する項に記載されている制約を満足していることが確認されます。

検証を無効にすると、Javaが提供している保護が低下し、形式が正しくないクラス・ファイルのために問題が発生することもあるため、無効にしないでください。

このオプションのmode引数には次を指定できます。

remote

ブートストラップ・クラス・ローダーでロードされていないすべてのバイトコードを検証します。これは-Xverifyオプションを指定しない場合のデフォルトの動作です。

all

すべてのバイトコードの検証を有効にします。

none

すべてのバイトコードの検証を無効にします。-Xverify:noneの使用はサポートされていません。

拡張ランタイム・オプション

これらのオプションはJava HotSpot VMのランタイム動作を制御します。

-XX:+CheckEndorsedAndExtDirs

承認された標準のオーバーライド機構または拡張機能機構を使用する場合、javaコマンドがJavaアプリケーションを実行するのを、オプションで防止できるようにします。このオプションは、次を確認することによって、アプリケーションがそのいずれかの機構を使用しているかどうかを確認します。

  • java.ext.dirsまたはjava.endorsed.dirsシステム・プロパティが設定されている。

  • lib/endorsedディレクトリが存在し、空でない。

  • lib/extディレクトリに、JDKのものを除き、あらゆるJARファイルがある。

  • プラットフォーム固有のシステム全体の拡張ディレクトリにJARファイルが含まれている。

-XX:+DisableAttachMechanism

ツールをJVMに添付できるメカニズムを無効にするオプションを有効にします。デフォルトでこのオプションは無効であり、添付メカニズムが有効にされていることを意味するため、jcmdjstackjmapおよびjinfoなどのツールを使用できます。

-XX:ErrorFile=filename

回復不能なエラーが発生した場合に、エラー・データが書き込まれるパスとファイル名を指定します。デフォルトで、このファイルは現在の作業ディレクトリに作成され、hs_err_pidpid.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です。

-XX:+FailOverToOldVerifier

新しい型チェッカーが失敗した場合に、古いベリファイアへの自動フェールオーバーを有効にします。デフォルトでは、このオプションは無効になっており、最近のバイトコード・バージョンのクラスに対してこれが無視されます(つまり、無効として扱われる)。古いバージョンのバイトコードのクラスに対してそれを有効にできます。

-XX:+FlightRecorder

アプリケーション実行時のJava Flight Recorder (JFR)の使用を有効にします。これは、次のように、-XX:+UnlockCommercialFeaturesオプションとともに動作する商用機能です:

java -XX:+UnlockCommercialFeatures -XX:+FlightRecorder

このオプションを指定しない場合、適切なjcmd診断コマンドを使用することで、実行中のJVMでJava Flight Recorderを有効化することもできます。

-XX:-FlightRecorder

アプリケーション実行時のJava Flight Recorder (JFR)の使用を無効にします。これは、次のように、-XX:+UnlockCommercialFeaturesオプションとともに動作する商用機能です:

java -XX:+UnlockCommercialFeatures -XX:-FlightRecorder

このオプションを指定する場合、実行中のJVMでJava Flight Recorderを有効化することはできません。

-XX:FlightRecorderOptions=parameter=value

JFRの動作を制御するパラメータを設定します。これは、-XX:+UnlockCommercialFeaturesオプションとともに動作する商用機能です:このオプションは、JFRが有効になっている(つまり、-XX:+FlightRecorderオプションが指定されている)場合にのみ使用できます。

次のリストには、使用可能なすべてのJFRパラメータが含まれています。

defaultrecording={true|false}

記録が連続的バックグラウンド記録なのか、限られた期間だけ実行するのかを指定します。デフォルトでは、このパラメータはfalse (限られた期間だけ記録を実行する)に設定されます。記録を連続的に実行するには、このパラメータをtrueに設定します。

disk={true|false}

JFRが連続的な記録をディスクに書き込むべきかどうかを指定します。デフォルトでは、このパラメータはfalse (ディスクへの連続的な記録を無効にする)に設定されます。有効にするには、このパラメータをtrueに設定し、同時にdefaultrecording=trueに設定します。

dumponexit={true|false}

制御された方法でJVMが終了するときに、JFRデータのダンプ・ファイルを生成するべきかどうかを指定します。デフォルトでは、このパラメータはfalse (終了時にダンプ・ファイルを生成しない)に設定されます。有効にするには、このパラメータをtrueに設定し、同時にdefaultrecording=trueに設定します。

ダンプ・ファイルは、dumponexitpathパラメータによって定義された場所に書き込まれます。

dumponexitpath=path

制御された方法でJVMが終了するとき(dumponexit=trueパラメータを設定した場合)に作成される、JFRデータを含むダンプ・ファイルのパスと名前を指定します。このパスの設定は、同時にdefaultrecording=trueを設定した場合にのみ有効です。

指定されたパスがディレクトリの場合、JVMは作成日時を示すファイル名を割り当てます。指定されたパスにファイル名が含まれており、そのファイルがすでに存在する場合、JVMは指定されたファイル名に日時スタンプを追加して新しいファイルを作成します。

globalbuffersize=size

データの保持に使用されるプライマリ・メモリーの合計量(バイト単位)を指定します。Kバイト単位のサイズを指定するにはkまたはK、Mバイト単位のサイズを指定するにはmまたはM、Gバイト単位のサイズを指定するにはgまたはGを付けます。デフォルトでは、このサイズは462848バイトに設定されます。

loglevel={quiet|error|warning|info|debug|trace}

JFRによってログ・ファイルに書き込まれるデータの量を指定します。デフォルトでは、infoに設定されます。

maxage=time

デフォルトの記録用にディスク・データを維持する最大期間を指定します。時間を秒で指定するためにはs、分の場合はm、時間の場合はhまたは日の場合dを追加します(たとえば、30sの指定は、30秒を意味します)。デフォルトでは、最大期間は15分(15m)に設定されます。

このパラメータは、disk=trueパラメータを設定した場合にのみ有効です。

maxchunksize=size

記録のデータ・チャンクの最大サイズ(バイト単位)を指定します。Kバイト単位のサイズを指定するにはkまたはK、Mバイト単位のサイズを指定するにはmまたはM、Gバイト単位のサイズを指定するにはgまたはGを付けます。デフォルトでは、データ・チャンクの最大サイズは12Mバイトに設定されます。

maxsize=size

デフォルト記録用に維持するディスク・データの最大サイズ(バイト単位)を指定します。Kバイト単位のサイズを指定するにはkまたはK、Mバイト単位のサイズを指定するにはmまたはM、Gバイト単位のサイズを指定するにはgまたはGを付けます。デフォルトで、ディスク・データの最大サイズは無制限で、このパラメータは0に設定されています。

このパラメータは、disk=trueパラメータを設定した場合にのみ有効です。

repository=path

一時ディスク・ストレージのリポジトリ(ディレクトリ)を指定します。デフォルトでは、システムの一時ディレクトリが使用されます。

samplethreads={true|false}

スレッド・サンプリングを有効にするかどうかを指定します。スレッド・サンプリングは、このパラメータとともにサンプリング・イベントが有効にされている場合にのみ行われます。デフォルトでは、このパラメータは有効になっています。

settings=path

イベント設定ファイル(種類はJFC)のパスと名前を指定します。デフォルトでは、JAVA_HOME/jre/lib/jfrにあるdefault.jfcファイルが使用されます。

stackdepth=depth

JFRによるスタック・トレースのスタックの深さ。デフォルトでは、この深さは64回のメソッド呼出しに設定されます。最大は2048、最小は1です。

threadbuffersize=size

スレッドごとのローカル・バッファ・サイズ(バイト単位)を指定します。Kバイト単位のサイズを指定するにはkまたはK、Mバイト単位のサイズを指定するにはmまたはM、Gバイト単位のサイズを指定するにはgまたはGを付けます。このパラメータの値を大きくすると、グローバル・ストレージへのフラッシュと競合せずに、より多くのデータを収集できます。スレッドリッチ環境でアプリケーション・フットプリントが増加する場合があります。デフォルトでは、ローカル・バッファ・サイズは5Kバイトに設定されます。

複数のパラメータの値を指定するには、それらをコロンで区切ります。たとえば、連続的な記録をディスクに書き込むようにJFRに指示し、データ・チャンクの最大サイズを10Mバイトに設定するには、次を指定します。

-XX:FlightRecorderOptions=defaultrecording=true,disk=true,maxchunksize=10M
-XX:LargePageSizeInBytes=size

Solarisでは、Javaヒープに使用されるラージ・ページの最大サイズ(バイト単位)を設定します。size引数は2の累乗でなければなりません(2、4、8、16...)。キロバイトを指定するには文字kまたはK、メガバイトを指定するには文字mまたはM、ギガバイトを指定するには文字gまたはGを付けます。デフォルトでサイズは0に設定され、JVMがラージ・ページのサイズを自動的に選択することを意味します。

次の例では、ラージ・ページ・サイズを4Mバイトに設定する方法を示します。

-XX:LargePageSizeInBytes=4m
-XX:MaxDirectMemorySize=size

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
-XX:NativeMemoryTracking=mode

JVMネイティブ・メモリーの使用状況の追跡のモードを指定します。このオプションのmode引数には次を指定できます。

off

JVMネイティブ・メモリーの使用状況を追跡しません。これは-XX:NativeMemoryTrackingオプションを指定しない場合のデフォルトの動作です。

summary

Javaヒープ、クラス、コード、およびスレッドなどのJVMサブシステムによるメモリー使用状況のみを追跡します。

detail

JVMサブシステムによるメモリー使用状況の追跡に加えて、各CallSite、各仮想メモリー領域およびそのコミット済領域によるメモリー使用状況を追跡します。

-XX:ObjectAlignmentInBytes=alignment

Javaオブジェクトのメモリー配置を設定します(バイト単位)。デフォルトでは、値が8バイトに設定されます。指定される値は、2の累乗にして8から256(両端を含む)の範囲内にする必要があります。このオプションにより、大きいJavaヒープ・サイズで圧縮ポインタを使用できます。

バイト単位のヒープ・サイズ制限は次のように計算されます:

4GB * ObjectAlignmentInBytes

注意: 配置の値が増えると、オブジェクト間の未使用の領域も増えます。結果として、大きいヒープ・サイズで圧縮ポインタを使用するメリットがわからない可能性があります。

-XX:OnError=string

回復不能なエラーが発生した場合に実行するカスタム・コマンドまたは一連のセミコロン区切りのコマンドを設定します。文字列にスペースを含む場合は、二重引用符で囲む必要があります。

次の例は、-XX:OnErrorオプションを使用してgcoreコマンドを実行する方法を示しています。回復不能なエラーが発生した場合に、このコマンドによってコア・イメージを作成し、デバッガを起動してプロセスに接続します(%pは現在のプロセスを指定します)。

-XX:OnError="gcore %p;dbx - %p"
-XX:OnOutOfMemoryError=string

OutOfMemoryError例外が最初にスローされた場合に実行するカスタム・コマンドまたは一連のセミコロン区切りのコマンドを設定します。文字列にスペースを含む場合は、二重引用符で囲む必要があります。コマンド文字列の例については、-XX:OnErrorオプションの説明を参照してください。

-XX:+PerfDataSaveToFile

有効にすると、Javaアプリケーションの終了時にjstat(1)バイナリ・データを保存します。このバイナリ・データは、hsperfdata_<pid>という名前のファイルに保存されます。ここで<pid>は実行したJavaアプリケーションのプロセス識別子です。次のようにjstatを使用して、このファイルに含まれるパフォーマンス・データを表示します。

jstat -class file:///<path>/hsperfdata_<pid>
jstat -gc file:///<path>/hsperfdata_<pid>
-XX:-PreferContainerQuotaForCPUCount

trueの場合は、そのCPU CFS (Completely Fair Scheduler)割当ての値(設定されている場合)に基づいてコンテナCPUの可用性を計算します。falseの場合、CPU共有値がCPU割当て値より小さければ、CPU共有値をかわりに使用します。

VMでは、-XX:ActiveProcessorCountオプションを使用して指定しなかった場合、コンテナCPUの可用性の値を使用して、使用可能なプロセッサの数を計算します。

注意: プロセスで使用可能なアクティブ・プロセッサの数をCPU数が超えることはありません。アクティブなプロセッサは、無効にするか、コンテナのcpuset (CPUのリスト。PrintContainerInfoオプションを参照)を選択することによって、制限されている場合があります。

-XX:+PrintCommandLineFlags

コマンド行に表示されるエルゴノミクスに従って選択されたJVMフラグの出力を有効にします。これは、ヒープ領域サイズや選択されたガベージ・コレクタなどのJVMによって設定されたエルゴノミクス値を知るために役立つ可能性があります。デフォルトでは、このオプションは無効になっており、フラグは出力されません。

-XX:+PrintContainerInfo

コンテナに関する次の情報を出力します:

  • 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:+PrintNMTStatistics

メモリー追跡が有効にされている場合(-XX:NativeMemoryTrackingを参照)、JVMで収集されたネイティブ・メモリー追跡データの出力を有効にします。デフォルトでは、このオプションは無効になっており、ネイティブ・メモリー追跡データは出力されません。

-XX:+RelaxAccessControlCheck

ベリファイアのアクセス制御チェックの量を減らします。デフォルトでは、このオプションは無効になっており、最近のバイトコード・バージョンのクラスに対してこれが無視されます(つまり、無効として扱われる)。古いバージョンのバイトコードのクラスに対してそれを有効にできます。

-XX:+ResourceManagement

アプリケーションの実行中にリソース管理の使用を有効にします。

これは、次のように-XX:+UnlockCommercialFeaturesオプションを同時に指定する必要がある商用機能です。

java -XX:+UnlockCommercialFeatures -XX:+ResourceManagement

-XX:ResourceManagementSampleInterval=value (ミリ秒)

ミリ秒単位でリソース管理測定のサンプリング間隔を制御するパラメータを設定します。

リソース管理が有効な場合のみ(つまり、-XX:+ResourceManagementオプションが指定されている場合)、このオプションを使用できます。

-XX:SharedArchiveFile=path

クラス・データ共有(CDS)アーカイブ・ファイルのパスと名前を指定します

-XX:SharedClassListFile=file_name

クラス・データ共有(CDS)アーカイブに格納するクラス・ファイルの名前を含むテキスト・ファイルを指定します。このファイルは、クラス・ファイルのフル・ネームを1行に1つ含みます。ただしスラッシュ(/)はドット(.)に置換されます。たとえば、クラスjava.lang.Objecthello.Mainを指定するには、次の2行を含むテキスト・ファイルを作成します。

java/lang/Object
hello/Main

このテキスト・ファイルで指定するクラス・ファイルには、アプリケーションでよく使用されるクラスを含める必要があります。アプリケーション、機能拡張またはブートストラップ・クラス・パスからのあらゆるクラスが含まれる場合があります。

-XX:+ShowMessageBoxOnError

JVMで回復不能なエラーが発生した場合に、ダイアログ・ボックスの表示を有効にします。これにより、JVMの終了を回避し、プロセスをアクティブに維持するため、これにデバッガを接続して、エラーの原因を調査できます。デフォルトでは、このオプションは無効になっています。

-XX:StartFlightRecording=parameter=value

JavaアプリケーションのJFR記録を開始します。これは、-XX:+UnlockCommercialFeaturesオプションとともに動作する商用機能です:このオプションは、実行時に記録を開始するJFR.start診断コマンドと同等です。JFR記録を開始するときに、次のパラメータを設定できます。

compress={true|false}

gzipファイル圧縮ユーティリティを使用してディスク上のJFR記録ログ・ファイル(種類はJFR)を圧縮するかどうかを指定します。このパラメータは、filenameパラメータが指定されている場合にのみ有効です。デフォルトでは、false (記録を圧縮しない)に設定されます。圧縮を有効にするには、このパラメータをtrueに設定します。

defaultrecording={true|false}

記録が連続的バックグラウンド記録なのか、限られた期間だけ実行するのかを指定します。デフォルトでは、このパラメータはfalse (限られた期間だけ記録を実行する)に設定されます。記録を連続的に実行するには、このパラメータをtrueに設定します。

delay=time

Javaアプリケーションの起動時間から記録を開始するまでの遅延時間を指定します。時間を秒で指定するためにはs、分の場合はm、時間の場合はhまたは日の場合はdを追加します(たとえば、10mの指定は、10分を意味します)。デフォルトでは、遅延はなく、このパラメータは0に設定されます。

dumponexit={true|false}

制御された方法でJVMが終了するときに、JFRデータのダンプ・ファイルを生成するべきかどうかを指定します。デフォルトでは、このパラメータはfalse (終了時にダンプ・ファイルを生成しない)に設定されます。有効にするには、パラメータをtrueに設定します。

ダンプ・ファイルは、filenameパラメータで定義された場所に書き込まれます。

例:

-XX:StartFlightRecording=name=test,filename=D:\test.jfr,dumponexit=true
duration=time

記録の継続時間を指定します。時間を秒で指定するためにはs、分の場合はm、時間の場合はhまたは日の場合はdを追加します(たとえば、5hの指定は、5時間を意味します)。デフォルトで、継続時間は無制限で、このパラメータは0に設定されています。

filename=path

JFR記録ログ・ファイルのパスと名前を指定します。

name=identifier

JFR記録の識別子を返します。デフォルトでは、Recording xに設定されます。

maxage=time

デフォルトの記録用にディスク・データを維持する最大期間を指定します。時間を秒で指定するためにはs、分の場合はm、時間の場合はhまたは日の場合dを追加します(たとえば、30sの指定は、30秒を意味します)。デフォルトでは、最大期間は15分(15m)に設定されます。

maxsize=size

デフォルト記録用に維持するディスク・データの最大サイズ(バイト単位)を指定します。Kバイト単位のサイズを指定するにはkまたはK、Mバイト単位のサイズを指定するにはmまたはM、Gバイト単位のサイズを指定するにはgまたはGを付けます。デフォルトで、ディスク・データの最大サイズは無制限で、このパラメータは0に設定されています。

settings=path

イベント設定ファイル(種類はJFC)のパスと名前を指定します。デフォルトでは、JAVA_HOME/jre/lib/jfrにあるdefault.jfcファイルが使用されます。

複数のパラメータの値を指定するには、それらをコロンで区切ります。たとえば、現在の作業ディレクトリ内のtest.jfrに記録を保存し、ログ・ファイルを圧縮するようにJFRに指示するには、次を指定します。

-XX:StartFlightRecording=filename=test.jfr,compress=true
-XX:ThreadStackSize=size

スレッド・スタック・サイズ(バイト単位)を設定します。キロバイトを指定するには文字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と同等です。

-XX:+TraceClassLoading

クラスがロードされたときに、それらの追跡を有効にします。デフォルトでは、このオプションは無効になっており、クラスは追跡されません。

-XX:+TraceClassLoadingPreorder

ロードされたすべてのクラスの追跡をそれらが参照される順番で有効にします。デフォルトでは、このオプションは無効になっており、クラスは追跡されません。

-XX:+TraceClassResolution

定数プールの解決の追跡を有効にします。デフォルトでは、このオプションは無効になっており、定数プールの解決は追跡されません。

-XX:+TraceClassUnloading

クラスがアンロードされたときに、それらの追跡を有効にします。デフォルトでは、このオプションは無効になっており、クラスは追跡されません。

-XX:+TraceLoaderConstraints

ローダーの制約の記録の追跡を有効にします。デフォルトでは、このオプションは無効であり、ローダー制約の記録は追跡されません。

-XX:+UnlockCommercialFeatures

商用機能の使用を有効にします。商用機能は、http://www.oracle.com/technetwork/java/javase/terms/products/index.htmlJava SE製品のページで定義されているOracle Java SE AdvancedまたはOracle Java SE Suiteパッケージに含まれています。

デフォルトでは、このオプションは無効になっており、JVMは商用機能なしで実行します。JVMプロセスでそれらを有効にすると、そのプロセスでのそれらの使用を無効にすることはできません。

このオプションを指定しない場合、適切なjcmd診断コマンドを使用することでも、実行中のJVMで商用機能のロックを解除できます。

-XX:+UseAltSigs

JVM内部シグナルとして、SIGUSR1およびSIGUSR2のかわりに代替シグナルを使用できるようにします。デフォルトでは、このオプションは無効になっており、代替シグナルは使用されません。このオプションは-Xusealtsigsと同等です。

-XX:+UseAppCDS

アプリケーション・クラス・データ共有(AppCDS)を有効化します。AppCDSを使用するには、CDSダンプ時刻(オプション-Xshare:dumpを参照)とアプリケーション実行時刻の間に、オプション-XX:SharedClassListFileおよび-XX:SharedArchiveFileの値を指定する必要もあります。

これは、-XX:+UnlockCommercialFeaturesオプションを同時に指定する必要がある商用機能です。これは実験的な機能でもあり、今後のリリースで変更される場合があります。

「アプリケーション・クラス・データ共有」を参照してください。

-XX:-UseBiasedLocking

バイアス・ロックの使用を無効にします。大量の非競合同期を行うアプリケーションは、このフラグを有効にすることで大幅な高速化が実現されることがありますが、特定のパターンのロックを行うアプリケーションは速度が低下することがあります。Biased Locking技法の詳細は、http://www.oracle.com/technetwork/java/tuning-139912.html#section4.2.5のJavaのチューニングに関するホワイト・ペーパーの例を参照してください。

デフォルトでは、このオプションが有効になっています。

-XX:-UseCompressedOops

圧縮されたポインタの使用を無効にします。デフォルトではこのオプションが有効であり、Javaヒープ・サイズが32GBより小さい場合に圧縮ポインタが使用されます。このオプションが有効にされている場合、オブジェクト参照は64ビット・ポインタの代わりに32ビットのオフセットで表され、アプリケーションを32GB未満のJavaヒープ・サイズで実行している場合に、一般にパフォーマンスが向上します。このオプションは64ビットJVMの場合にのみ機能します。

Javaヒープ・サイズが32GBより大きい場合にも圧縮ポインタを使用できます。-XX:ObjectAlignmentInBytesオプションを参照してください。

-XX:-UseContainerSupport

VMで自動コンテナ検出サポートが提供され、これによって、Dockerコンテナ内で実行されるJavaプロセスで使用可能なメモリーの容量およびプロセッサの数をVMで決定できます。この情報はシステム・リソースを割り当てるために使用されます。このサポートはLinux x64プラットフォームでのみ使用できます。サポートされている場合、このフラグのデフォルト値はtrueで、コンテナのサポートはデフォルトで有効になります。無効にするには、-XX:-UseContainerSupportを使用します。

-XX:+UseHugeTLBFS

Linux用のこのオプションは、-XX:+UseLargePagesを指定するのと同じです。このオプションはデフォルトでは無効です。このオプションは、メモリーの予約時にすべてのラージ・ページを事前に割り当てます。そのため、JVMはラージ・ページ・メモリー領域を動的に拡張または縮小できません。この動作を行う場合は、-XX:UseTransparentHugePagesを参照してください。

詳細は、「ラージ・ページ」を参照してください。

-XX:+UseLargePages

ラージ・ページ・メモリーの使用を有効にします。デフォルトでは、このオプションは無効になっており、ラージ・ページ・メモリーは使用されません。

詳細は、「ラージ・ページ」を参照してください。

-XX:+UseMembar

スレッド状態の遷移時にメンバーの発行を有効にします。このオプションは、有効になっているARMサーバーを除くすべてのプラットフォーム上で、デフォルトでは無効になっています。(ARMサーバーでこのオプションを無効にしないことをお薦めします。)

-XX:+UsePerfData

perfdata機能を有効にします。このオプションはデフォルトで有効にされており、JVMのモニタリングとパフォーマンスのテストが許可されます。これを無効にすると、hsperfdata_useridディレクトリの作成が抑制されます。perfdata機能を無効にするには、-XX:-UsePerfDataを指定します。

-XX:+UseTransparentHugePages

Linuxでは、動的に拡張または縮小できるラージ・ページの使用を有効化してください。このオプションはデフォルトでは無効です。OSが他のページを移動してヒュージ・ページを作成するため、透過的ヒュージ・ページでパフォーマンスの問題が検出される場合があります。このオプションは試験的に使用できます。

詳細は、「ラージ・ページ」を参照してください。

-XX:+AllowUserSignalHandlers

アプリケーションがシグナル・ハンドラをインストールできるようにします。デフォルトでは、このオプションは無効になっており、アプリケーションはシグナル・ハンドラをインストールできません。

拡張JITコンパイラ・オプション

これらのオプションはJava HotSpot VMによって実行されるJust-in-Time (JIT)動的コンパイルを制御します。

-XX:+AggressiveOpts

将来のリリースでデフォルトになることが予想される積極的なパフォーマンス最適化機能の使用を有効にします。デフォルトでは、このオプションは無効になっており、試験的パフォーマンス機能は使用されません。

-XX:AllocateInstancePrefetchLines=lines

インスタンス割当てポインタの前にプリフェッチする行数を設定します。デフォルトでプリフェッチする行数は1に設定されています。

-XX:AllocateInstancePrefetchLines=1

Java HotSpot Server VMのみが、このオプションをサポートしています。

-XX:AllocatePrefetchDistance=size

オブジェクト割当てのプリフェッチ距離のサイズ(バイト単位)を設定します。新しいオブジェクトの値で書き込まれようとしているメモリーが、最後に割り当てられたオブジェクトのアドレスからこの距離まで、プリフェッチされます。各Javaスレッドは独自の割当てポイントがあります。

マイナスの値は、プリフェッチ距離がプラットフォームに基づいて選択されたことを示します。プラスの値はプリフェッチするバイトです。キロバイトを指定するには文字kまたはK、メガバイトを指定するには文字mまたはM、ギガバイトを指定するには文字gまたはGを付けます。デフォルト値は-1に設定されます。

次の例は、プリフェッチ距離を1024バイトに設定する方法を示しています。

-XX:AllocatePrefetchDistance=1024

Java HotSpot Server VMのみが、このオプションをサポートしています。

-XX:AllocatePrefetchInstr=instruction

割当てポインタの前にプリフェッチするプリフェッチ命令を設定します。Java HotSpot Server VMのみが、このオプションをサポートしています。指定可能な値は0から3です。値の背後にある実際の命令はプラットフォームによって異なります。デフォルトで、プリフェッチ命令は0に設定されます。

-XX:AllocatePrefetchInstr=0

Java HotSpot Server VMのみが、このオプションをサポートしています。

-XX:AllocatePrefetchLines=lines

コンパイル済コードで生成されるプリフェッチ命令を使用して、最後のオブジェクトの割当て後にロードされるキャッシュ行数を設定します。デフォルト値は、最後に割り当てられたオブジェクトがインスタンスの場合は1で、配列の場合は3になります。

次の例は、ロードされるキャッシュ行数を5に設定する方法を示しています。

-XX:AllocatePrefetchLines=5

Java HotSpot Server VMのみが、このオプションをサポートしています。

-XX:AllocatePrefetchStepSize=size

連続したプリフェッチ命令のステップ・サイズ(バイト単位)を設定します。キロバイトを指定するには文字kまたはK、メガバイトを指定するには文字mまたはM、ギガバイトを指定するには文字gまたはGを付けます。デフォルトでは、ステップ・サイズは16バイトに設定されます。

-XX:AllocatePrefetchStepSize=16

Java HotSpot Server VMのみが、このオプションをサポートしています。

-XX:AllocatePrefetchStyle=style

プリフェッチ命令の生成されるコード・スタイルを設定します。style引数は0から3の整数です。

0

プリフェッチ命令を生成しません。

1

各割当て後にプリフェッチ命令を実行します。これはデフォルトのパラメータです。

2

スレッドローカル割当てブロック(TLAB)ウォーターマーク・ポインタを使用して、プリフェッチ命令を実行するタイミングを決定します。

3

SPARCで割当てプリフェッチにはBIS命令を使用します。

Java HotSpot Server VMのみが、このオプションをサポートしています。

-XX:+BackgroundCompilation

バックグラウンド・コンパイルを有効にします。このオプションは、デフォルトで有効になっています。バックグラウンド・コンパイルを無効にするには、-XX:-BackgroundCompilationを指定します(これは-Xbatchを指定するのと同等です)。

-XX:CICompilerCount=threads

コンパイルに使用するコンパイラ・スレッド数を設定します。デフォルトで、スレッド数はサーバーJVMの場合に2に設定され、クライアントJVMの場合に1に設定され、階層型コンパイルが使用される場合はコア数まで拡大されます。次の例は、スレッド数を2に設定する方法を示しています。

-XX:CICompilerCount=2
-XX:CodeCacheMinimumFreeSpace=size

コンパイルに必要な最小空き領域(バイト単位)を設定します。キロバイトを指定するには文字kまたはK、メガバイトを指定するには文字mまたはM、ギガバイトを指定するには文字gまたはGを付けます。残りが最小空き領域より少なくなると、コンパイルは停止します。デフォルトでは、このオプションは500Kバイトに設定されます。次の例は、最小空き領域を1024Mバイトに設定する方法を示しています。

-XX:CodeCacheMinimumFreeSpace=1024m
-XX:CompileCommand=command,method[,option]

メソッドで実行するコマンドを指定します。たとえば、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)で区切ります。次のコマンドを使用できます。

break

デバッグ時に指定したメソッドのコンパイルの開始時にJVMが停止するブレークポイントを設定します。

compileonly

指定したメソッドを除くすべてのメソッドをコンパイルから除外します。かわりに、-XX:CompileOnlyオプションを使用でき、これにより複数のメソッドを指定できます。

dontinline

指定したメソッドのインライン化を妨げます。

exclude

指定したメソッドをコンパイルから除外します。

help

-XX:CompileCommandオプションのヘルプ・メッセージを出力します。

inline

指定したメソッドのインライン化を試みます。

log

指定したメソッドを除くすべてのメソッドのコンパイルのロギングを除外します(-XX:+LogCompilationオプションを使用して)。デフォルトで、ロギングはすべてのコンパイル済メソッドに対して実行されます。

option

このコマンドは、最後の引数(option)の代わりに、指定したメソッドにJITコンパイル・オプションを渡すために使用できます。このコンパイル・オプションは、メソッド名の後の最後に設定します。たとえば、StringBufferクラスのappend()メソッドのBlockLayoutByFrequencyオプションを有効にするには、次を使用します。

-XX:CompileCommand=option,java/lang/StringBuffer.append,BlockLayoutByFrequency

カンマまたはスペースで区切った複数のコンパイル・オプションを指定できます。

print

指定したメソッドのコンパイル後に生成されたアセンブラ・コードを出力します。

quiet

コンパイル・コマンドを出力しません。デフォルトで、-XX:CompileCommandオプションで指定したコマンドが出力されます。たとえば、StringクラスのindexOf()メソッドをコンパイルから除外した場合は、次が標準出力に出力されます。

CompilerOracle: exclude java/lang/String.indexOf

これを抑制するには、他の-XX:CompileCommandオプションの前に-XX:CompileCommand=quietオプションを指定します。

-XX:CompileCommandFile=filename

JITコンパイラ・コマンドが読み取られるファイルを設定します。デフォルトで、.hotspot_compilerファイルは、JITコンパイラによって実行されるコマンドを格納するために使用されます。

コマンド・ファイルの各行は、コマンド、クラス名、およびコマンドが使用されるメソッド名を表します。たとえば、この行は、StringクラスのtoString()メソッドのアセンブリ・コードを出力します。

print java/lang/String toString

メソッドで実行するJITコンパイラのコマンドを指定する詳細については、-XX:CompileCommandオプションを参照してください。

-XX:CompileOnly=methods

コンパイルを制限すべきメソッドのリスト(カンマ区切り)を設定します。指定したメソッドのみをコンパイルします。パッケージとサブパッケージを含む完全クラス名で各メソッドを指定します。たとえば、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
-XX:CompileThreshold=invocations

コンパイル前に解析対象メソッドの呼出しの数を設定します。デフォルトで、サーバーJVMでは、JITコンパイラは10,000回の解析対象メソッドの呼出しを実行して、効率的なコンパイルのための情報を収集します。クライアントJVMの場合、デフォルトの設定は1,500回の呼出しです。層コンパイルが有効な場合、このオプションは無視されます。オプション-XX:+TieredCompilationを参照してください。次の例は、解析対象メソッドの呼出し数を5,000に設定する方法を示しています。

-XX:CompileThreshold=5000

-Xcompオプションを指定して、コンパイル前にJavaメソッドの解析を完全に無効にできます。

-XX:+DoEscapeAnalysis

エスケープ解析の使用を有効にします。このオプションは、デフォルトで有効になっています。エスケープ解析の使用を無効にするには-XX:-DoEscapeAnalysisを指定します。Java HotSpot Server VMのみが、このオプションをサポートしています。

-XX:InitialCodeCacheSize=size

初期コード・キャッシュ・サイズ(バイト単位)を設定します。キロバイトを指定するには文字kまたはK、メガバイトを指定するには文字mまたはM、ギガバイトを指定するには文字gまたはGを付けます。デフォルト値は500Kバイトに設定されます。初期コード・キャッシュ・サイズをシステムの最小メモリー・ページ・サイズより小さくしないでください。次の例は、初期コード・キャッシュ・サイズを32Kバイトに設定する方法を示しています。

-XX:InitialCodeCacheSize=32k
-XX:+Inline

メソッドのインライン化を有効にします。このオプションは、パフォーマンス向上のため、デフォルトで有効になっています。メソッドのインライン化を無効にするには、-XX:-Inlineを指定します。

-XX:InlineSmallCode=size

インライン化すべきコンパイル済メソッドの最大コード・サイズ(バイト単位)を設定します。キロバイトを指定するには文字kまたはK、メガバイトを指定するには文字mまたはM、ギガバイトを指定するには文字gまたはGを付けます。指定したサイズより小さいサイズを持つコンパイル済メソッドのみがインライン化されます。デフォルトでは、最大コード・サイズは1000バイトに設定されます。

-XX:InlineSmallCode=1000
-XX:+LogCompilation

現在の作業ディレクトリ内のhotspot.logというファイルへのコンパイル・アクティビティのロギングを有効にします。-XX:LogFileオプションを使用して、別のログ・ファイル・パスと名前を指定できます。

デフォルトでは、このオプションは無効になっており、コンパイル・アクティビティはログに記録されません。-XX:+LogCompilationオプションは、診断JVMオプションのロックを解除する-XX:UnlockDiagnosticVMOptionsオプションと一緒に使用する必要があります。

-XX:+PrintCompilationオプションを使用して、メソッドがコンパイルされるたびに、コンソールにメッセージが出力される詳細診断出力を有効にできます。

-XX:MaxInlineSize=size

インラインするメソッドの最大バイトコード・サイズ(バイト単位)を設定します。キロバイトを指定するには文字kまたはK、メガバイトを指定するには文字mまたはM、ギガバイトを指定するには文字gまたはGを付けます。デフォルトでは、最大バイトコード・サイズは35バイトに設定されます。

-XX:MaxInlineSize=35
-XX:MaxNodeLimit=nodes

単一のメソッドのコンパイル時に使用されるノードの最大数を設定します。デフォルトでは、ノードの最大数は65,000に設定されます。

-XX:MaxNodeLimit=65000
-XX:MaxTrivialSize=size

インライン化する簡易メソッドの最大バイトコード・サイズ(バイト単位)を設定します。キロバイトを指定するには文字kまたはK、メガバイトを指定するには文字mまたはM、ギガバイトを指定するには文字gまたはGを付けます。デフォルトでは、簡易メソッドの最大バイトコード・サイズは6バイトに設定されます。

-XX:MaxTrivialSize=6
-XX:+OptimizeStringConcat

String連結操作の最適化を有効にします。このオプションは、デフォルトで有効になっています。String連結操作の最適化を有効にするには、-XX:-OptimizeStringConcatを指定します。Java HotSpot Server VMのみが、このオプションをサポートしています。

-XX:+PrintAssembly

外部disassembler.soライブラリを使用して、バイト・コード化されたメソッドおよびネイティブ・メソッド用のアセンブリ・コードの出力を有効にします。これにより、生成されたコードを表示できるため、パフォーマンス問題の診断に役立つことがあります。

デフォルトでは、このオプションは無効になっており、アセンブリ・コードは出力されません。-XX:+PrintAssemblyオプションは、診断JVMオプションのロックを解除する-XX:UnlockDiagnosticVMOptionsオプションと一緒に使用する必要があります。

-XX:+PrintCompilation

メソッドがコンパイルされるたびに、コンソールにメッセージを出力することによって、JVMからの詳細診断出力を有効にします。これにより、実際にコンパイルされるメソッドを確認できます。デフォルトでは、このオプションは無効になっており、診断出力は出力されません。

-XX:+LogCompilationオプションを使用して、コンパイル・アクティビティをファイルに記録することもできます。

-XX:+PrintInlining

インライン化の出力の決定を有効にします。これにより、インライン化されるメソッドを確認できます。

デフォルトでは、このオプションは無効になっており、インライン化情報は出力されません。-XX:+PrintInliningオプションは、診断JVMオプションのロックを解除する-XX:UnlockDiagnosticVMOptionsオプションと一緒に使用する必要があります。

-XX:ReservedCodeCacheSize=size

JITでコンパイルされたコードの最大コード・キャッシュ・サイズ(バイト単位)を設定します。キロバイトを指定するには文字kまたはK、メガバイトを指定するには文字mまたはM、ギガバイトを指定するには文字gまたはGを付けます。デフォルトの最大コード・キャッシュ・サイズは240MBです。オプション-XX:-TieredCompilationを使用して階層化コンパイルを無効にした場合、デフォルトのサイズは48MBです。このオプションは2GBの制限があります。そうでない場合は、エラーが生成されます。最大コード・キャッシュ・サイズを初期コード・キャッシュ・サイズより小さくしないでください。-XX:InitialCodeCacheSizeオプションを参照してください。このオプションは-Xmaxjitcodesizeと同等です。

-XX:RTMAbortRatio=abort_ratio

RTM中止率は、すべての実行済RTMトランザクションに対するパーセンテージ(%)として指定されます。中止されたトランザクション数がこの率を超えた場合、コンパイルされたコードが非最適化されます。この率は、-XX:+UseRTMDeoptオプションが有効な場合に使用されます。このオプションのデフォルト値は50です。つまり、すべてのトランザクションの50%が中止された場合、コンパイルされたコードが非最適化されます。

-XX:RTMRetryCount=number_of_retries

中止またはビジーの場合、RTMロック・コードは、標準のロック・メカニズムにフォールバックする前にこのオプションによって指定された回数再試行されます。このオプションのデフォルト値は5です。-XX:UseRTMLockingオプションを有効化する必要があります。

-XX:-TieredCompilation

階層化コンパイルの使用を無効にします。デフォルトでは、このオプションが有効になっています。Java HotSpot Server VMのみが、このオプションをサポートしています。

-XX:+UseAES

Intel、AMDおよびSPARCハードウェアに対して、ハードウェアベースのAES組込みを有効化します。Intel Westmere (2010以降)、AMD Bulldozer (2011以降)およびSPARC (T4以降)が、サポートされているハードウェアです。UseAESは、UseAESIntrinsicsとともに使用します。

-XX:+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

コンパイラのシャットダウン前に、コード・キャッシュのフラッシュを有効にします。このオプションは、デフォルトで有効になっています。コンパイラのシャットダウン前に、コード・キャッシュのフラッシュを無効にするには、-XX:-UseCodeCacheFlushingを指定します。

-XX:+UseCondCardMark

カード表を更新する前に、カードがすでにマークされているかどうかのチェックを有効にします。このオプションは、デフォルトで無効にされており、複数のソケットを持つマシンでのみ使用してください。それによって、同時操作に大きく依存するJavaアプリケーションのパフォーマンスが向上します。Java HotSpot Server VMのみが、このオプションをサポートしています。

-XX:+UseRTMDeopt

中止率に応じて、RTMロックを自動調整します。この率は、-XX:RTMAbortRatioオプションによって指定されます。中止されたトランザクション数が中止率を超えた場合、ロックを含むメソッドがすべてのロックで標準のロックとして非最適化および再コンパイルされます。このオプションはデフォルトでは無効です。-XX:+UseRTMLockingオプションを有効化する必要があります。

-XX:+UseRTMLocking

フォールバック・ハンドラとして標準のロック・メカニズムを使用して、展開されたすべてのロックに対してRestricted Transactional Memory (RTM)ロック・コードを生成します。このオプションはデフォルトでは無効です。RTMに関連するオプションは、Transactional Synchronization Extensions (TSX)をサポートするx86 CPU上のJava HotSpot Server VMに対してのみ使用可能です。

RTMは、x86命令セット拡張でマルチスレッド・アプリケーションの作成を容易にするIntelのTSXの一部です。RTMでは、新しい命令 XBEGINXABORTXENDおよびXTESTが導入されています。XBEGINおよびXEND命令は、トランザクションとして実行するための命令セットを囲みます。トランザクションの実行時に競合が見つからなかった場合、メモリーとレジスタの変更が、XEND命令で同時にコミットされます。XABORT命令ではトランザクションを明示的に中止でき、XEND命令では命令セットがトランザクション内で実行中かどうかを確認できます。

トランザクションのロックは、別のスレッドが同じトランザクションにアクセスしようとしたときに展開されます。したがって、そのトランザクションへのアクセスを最初にリクエストしなかったスレッドはブロックされます。RTMでは、トランザクションが中止または失敗した場合のために、フォールバックの操作セットを指定する必要があります。RTMロックとは、TSXのシステムに委譲されているロックです。

RTMにより、重要なリージョンにおいて衝突が少なく競合度の高いロックのパフォーマンスが向上されます(これは、複数のスレッドによって同時にアクセスできないコードです)。また、RTMにより、粗粒度ロックのパフォーマンスも向上されますが、一般的にマルチスレッド・アプリケーションでのパフォーマンスはよくありません。(粗粒度ロックとは、ロックの取得および解放のオーバーヘッドを最小化するために長い期間ロックを保持する戦略であり、一方、細粒度ロックとは必要な場合のみロックし可能なかぎり早期にロック解除することで最大限の並行処理の達成を試みる戦略です。)さらに、異なるスレッドによって使用されている軽度な競合ロックの場合、RTMにより、誤ったキャッシュ・ライン共有(キャッシュ・ライン・ピンポンとも呼ばれる)を削減できます。これは、異なるプロセッサからの複数のスレッドが異なるリソースにアクセスしている場合に発生しますが、リソースは同じキャッシュ・ラインを共有します。結果として、プロセッサは他のプロセッサのキャッシュ・ラインを繰り返し無効にし、これにより、キャッシュではなくメイン・メモリーからの読取りが強制されます。

-XX:+UseSHA

SPARCハードウェアのSHA暗号化ハッシュ関数のハードウェアベースの組込みを有効にします。UseSHAは、UseSHA1IntrinsicsUseSHA256IntrinsicsおよびUseSHA512Intrinsicsオプションと組み合せて使用します。

UseSHAおよびUseSHA*Intrinsicsフラグはデフォルトで有効であり、SPARC T4以上のJava HotSpot Server VM 64ビットでのみサポートされます。

SHA操作に対してsun.security.provider.Sunプロバイダを使用する場合のみ、この機能を適用できます。

すべてのハードウェアベースのSHA組込みを無効化するには、-XX:-UseSHAを指定してください。特定のSHA組込みのみ無効化するには、適切な対応するオプションを使用してください。例: -XX:-UseSHA256Intrinsics

-XX:+UseSHA1Intrinsics

SHA-1暗号化ハッシュ関数の組込みを有効にします。

-XX:+UseSHA256Intrinsics

SHA-224およびSHA-256暗号化ハッシュ関数の組込みを有効にします。

-XX:+UseSHA512Intrinsics

SHA-384およびSHA-512暗号化ハッシュ関数の組込みを有効にします。

-XX:+UseSuperWord

スカラー操作のスーパーワード操作への変換を有効にします。このオプションは、デフォルトで有効になっています。スカラー操作のスーパーワード操作への変換を無効にするには、-XX:-UseSuperWordを指定します。Java HotSpot Server VMのみが、このオプションをサポートしています。

拡張保守性オプション

これらのオプションは、システム情報を収集し、詳細デバッグを実行する機能を提供します。

-XX:+ExtendedDTraceProbes

パフォーマンスに影響を与える、dtraceツールの追加のプローブを有効にします。デフォルトでは、このオプションは無効になっており、dtraceは標準プローブだけを実行します。

-XX:+HeapDumpOnOutOfMemoryError

java.lang.OutOfMemoryError例外がスローされた場合に、ヒープ・プロファイラ(HPROF)を使用して、Javaヒープの現在のディレクトリ内のファイルへのダンプを有効にします。ヒープ・ダンプ・ファイルのパスと名前を明示的に設定するには、-XX:HeapDumpPathオプションを使用します。デフォルトでは、このオプションは無効になっており、OutOfMemoryError例外がスローされたときにヒープがダンプされません。

-XX:HeapDumpPath=path

-XX:+HeapDumpOnOutOfMemoryErrorオプションが設定されている場合に、ヒープ・プロファイラ(HPROF)によって提供されるヒープ・ダンプを書き込むパスとファイル名を設定します。デフォルトで、このファイルは現在の作業ディレクトリに作成され、java_pidpid.hprofと名付けられます。ここでpidはエラーを発生させたプロセスの識別子です。次の例では、デフォルトのファイルを明示的に設定する方法を示します(%pは現在のプロセスの識別子を表します)。

-XX:HeapDumpPath=./java_pid%p.hprof

次の例は、ヒープ・ダンプ・ファイルを/var/log/java/java_heapdump.hprofに設定する方法を示しています。

-XX:HeapDumpPath=/var/log/java/java_heapdump.hprof
-XX:LogFile=path

ログ・データが書き込まれるパスとファイル名を設定します。デフォルトでは、ファイルは現在の作業ディレクトリに作成され、hotspot.logと名付けられます。

次の例は、ログ・ファイルを/var/log/java/hotspot.logに設定する方法を示しています。

-XX:LogFile=/var/log/java/hotspot.log
-XX:+PrintClassHistogram

Control+Cイベント(SIGTERM)後のクラス・インスタンス・ヒストグラムの出力を有効にします。デフォルトでは、このオプションは無効になっています。

このオプションを設定することは、jmap -histoコマンドまたはjcmd pid GC.class_histogramコマンドを実行することと同等で、pidは現在のJavaプロセス識別子です。

-XX:+PrintConcurrentLocks

[Control]+[C]イベント(SIGTERM)後にjava.util.concurrentロックの印刷を有効にします。デフォルトでは、このオプションは無効になっています。

このオプションを設定することは、jstack -lコマンドまたはjcmd pid Thread.print -lコマンドを実行することと同等で、pidは現在のJavaプロセス識別子です。

-XX:+UnlockDiagnosticVMOptions

JVMの診断目的のオプションをロック解除します。デフォルトでは、このオプションは無効になっており、診断オプションを使用できません。

拡張ガベージ・コレクション・オプション

これらのオプションはJava HotSpot VMによって実行されるガベージ・コレクション(GC)を制御します。

-XX:ActiveProcessorCount=x

ガベージ・コレクションやForkJoinPoolなどの様々な操作に使用するスレッド・プールのサイズを計算するために、VMが使用するCPUの数をオーバーライドします。

通常、VMはオペレーティング・システムから使用可能なプロセッサの数を決定します。このフラグは、Dockerコンテナ内で複数のJavaプロセスを実行するときに、CPUリソースをパーティション化するために役立ちます。UseContainerSupportが有効になっていない場合でも、このフラグが使用されます。コンテナのサポートの有効化および無効化の説明は、-XX:-UseContainerSupportを参照してください。

-XX:+AggressiveHeap

Javaヒープ最適化を有効にします。これにより、コンピュータの構成(RAMおよびCPU)に基づいて、メモリーが集中的に割り当てられる長時間実行ジョブに最適になるように、各種パラメータを設定します。デフォルトでは、このオプションは無効になっており、ヒープは最適化されません。

-XX:+AlwaysPreTouch

JVM初期化時にJavaヒープ上のすべてのページのアクセスを有効にします。これにより、main()メソッドに入る前に、すべてのページがメモリーに入れられます。このオプションは、すべての仮想メモリーを物理メモリーにマッピングして、長時間実行システムをシミュレートするテストで使用できます。デフォルトでは、このオプションは無効になっており、JVMヒープ領域がいっぱいになると、すべてのページがコミットされます。

-XX:+CMSClassUnloadingEnabled

コンカレント・マーク・スイープ(CMS)ガベージ・コレクタを使用した場合に、クラスのアンロードを有効にします。このオプションは、デフォルトで有効になっています。CMSガベージ・コレクタのクラスのアンロードを無効にするには、-XX:-CMSClassUnloadingEnabledを指定します。

-XX:CMSExpAvgFactor=percent

並行処理コレクションの統計のための指数平均の計算時に、現在のサンプルの重み付けに使用される時間のパーセンテージ(0から100)を設定します。デフォルトで、指数平均係数は25%に設定されます。次の例は、係数を15%に設定する方法を示しています。

-XX:CMSExpAvgFactor=15
-XX:CMSInitiatingOccupancyFraction=percent

CMSコレクション・サイクルを開始するOld世代の占有率(0から100)を設定します。デフォルト値は-1に設定されます。マイナスの値(デフォルトを含む)は-XX:CMSTriggerRatioを使用して、開始の占有割合の値を定義することを意味します。

次の例は、占有の割合を20%に設定する方法を示しています。

-XX:CMSInitiatingOccupancyFraction=20
-XX:+CMSScavengeBeforeRemark

CMS remarkステップの前に清掃の試みを有効にします。デフォルトでは、このオプションは無効になっています。

-XX:CMSTriggerRatio=percent

CMSコレクション・サイクルの開始前に割り当てられる-XX:MinHeapFreeRatioによって指定された値のパーセンテージ(0から100)を設定します。デフォルト値は80%に設定されます。

次の例は、占有の割合を75%に設定する方法を示しています。

-XX:CMSTriggerRatio=75
-XX:ConcGCThreads=threads

並行GCに使用されるスレッド数を設定します。デフォルト値は、JVMに使用可能なCPUの数によって異なります。

たとえば並行GCのスレッド数を2に設定するには、次のオプションを指定します。

-XX:ConcGCThreads=2
-XX:+DisableExplicitGC

System.gc()への呼出しの処理を無効にするオプションを有効にします。このオプションはデフォルトで無効にされ、System.gc()の呼出しが処理されることを意味します。System.gc()への呼出しの処理が無効にされている場合、JVMは引き続き必要に応じてGCを実行します。

-XX:+ExplicitGCInvokesConcurrent

System.gc()要求を使用して、並行GCの呼出しを有効にします。このオプションはデフォルトで無効にされており、-XX:+UseConcMarkSweepGCオプションと一緒の場合のみ有効にできます。

-XX:+ExplicitGCInvokesConcurrentAndUnloadsClasses

System.gc()要求を使用して、並行GCの呼出しと並行GCサイクル時のクラスのアンロードを有効にします。このオプションはデフォルトで無効にされており、-XX:+UseConcMarkSweepGCオプションと一緒の場合のみ有効にできます。

-XX:G1HeapRegionSize=size

ガベージファースト(G1)コレクタを使用した場合に、Javaヒープが再分割される領域のサイズを設定します。この値は1Mバイトから32Mバイトまでで指定できます。デフォルトの領域サイズは、ヒープ・サイズに基づいて、エルゴノミクスに従って決定されます。

次の例は、再分割のサイズを16Mバイトに設定する方法を示しています。

-XX:G1HeapRegionSize=16m
-XX:+G1PrintHeapRegions

割り当てられる領域とG1コレクタによって再生される領域に関する情報の出力を有効にします。デフォルトでは、このオプションは無効になっています。

-XX:G1ReservePercent=percent

G1コレクタの昇格の失敗の可能性を減らすために、失敗の上限として予約されるヒープのパーセンテージ(0から50)を設定します。デフォルトで、このオプションは10%に設定されます。

次の例は、予約されたヒープを20%に設定する方法を示しています。

-XX:G1ReservePercent=20
-XX:InitialHeapSize=size

メモリー割当てプールの初期サイズ(バイト単位)を設定します。この値は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:InitialRAMPercentage=percent

-XX:MaxRAMオプションで説明されているとおり、人間工学に基づくヒューリスティックを最大量の割合として適用する前に、JVMがJavaヒープに使用する初期のメモリー量を設定します。デフォルト値は1.5625%です。

次の例は、Javaヒープに使用される初期メモリー量の割合を設定する方法を示しています:

-XX:InitialRAMPercentage=5
-XX:InitialSurvivorRatio=ratio

スループット・ガベージ・コレクタ(これは-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
-XX:InitiatingHeapOccupancyPercent=percent

並行GCサイクルを開始するヒープ占有率(0から100)を設定します。これはいずれかの世代(G1ガベージ・コレクタなど)だけでなく、ヒープ全体の占有率に基づいて並行GCサイクルをトリガーするガベージ・コレクタによって使用されます。

デフォルトでは、開始値は45%に設定されます。0の値は無停止のGCサイクルを示します。次の例は、開始ヒープ占有率を75%に設定する方法を示しています。

-XX:InitiatingHeapOccupancyPercent=75
-XX:MaxGCPauseMillis=time

GCの最大一時停止時間(ミリ秒単位)の目標を設定します。これはソフト・ゴールのため、JVMはその実現のために最善の努力をします。デフォルトでは、最大一時停止時間値はありません。

次の例は、最大目標一時停止時間を500msに設定する方法を示しています。

-XX:MaxGCPauseMillis=500
-XX:MaxHeapSize=size

メモリー割当てプールの最大サイズ(バイト単位)を設定します。この値は、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と同等です。

-XX:MaxHeapFreeRatio=percent

GCイベント後の空きヒープ領域の最大許容率(0から100)を設定します。空きヒープ領域がこの値を超えて拡大した場合、ヒープが縮小されます。デフォルトで、この値は70%に設定されます。

次の例は、最大空きヒープ率を75%に設定する方法を示しています。

-XX:MaxHeapFreeRatio=75
-XX:MaxMetaspaceSize=size

クラス・メタデータに割当て可能なネイティブ・メモリーの最大量を設定します。デフォルトでは、サイズは無制限です。アプリケーションのメタデータの量は、アプリケーション自体、その他の実行中のアプリケーション、およびシステムで使用可能なメモリーの量によって異なります。

次の例は、最大クラス・メタデータ・サイズを256Mバイトに設定する方法を示しています。

-XX:MaxMetaspaceSize=256m
-XX:MaxNewSize=size

Young世代(ナーサリ)のヒープの最大サイズ(バイト単位)を設定します。デフォルト値はエルゴノミクスに従って設定されます。

-XX:MaxRAMPercentage=percent

-XX:MaxRAMオプションで説明されているとおり、人間工学に基づくヒューリスティックを最大量の割合として適用する前に、JVMがJavaヒープに使用できるメモリーの最大量を設定します。デフォルト値は25%です。

このオプションを指定すると、このオプションと、メモリーの最大量に影響する他のオプションを組み合せた結果が、圧縮oopsでアドレス指定されたメモリーの範囲よりも大きい場合に、圧縮oopsの自動使用が無効になります。圧縮oopsの詳細は、-XX:UseCompressedOopsを参照してください。

次の例は、Javaヒープに使用されるメモリーの最大量の割合を設定する方法を示しています:

-XX:MaxRAMPercentage=75
-XX:MaxTenuringThreshold=threshold

適応型GCサイズ変更に使用する最大殿堂入りしきい値を設定します。最大値は15です。デフォルト値はパラレル(スループット)コレクタの場合15で、CMSコレクタの場合6です。

次の例は、最大殿堂入りしきい値を10に設定する方法を示しています。

-XX:MaxTenuringThreshold=10
-XX:MetaspaceSize=size

初めて超えたときにガベージ・コレクションがトリガーされる、割り当てられるクラス・メタデータ領域のサイズを設定します。ガベージ・コレクションのこのしきい値は、使用されるメタデータの量に応じて増加または減少します。デフォルトのサイズはプラットフォームによって異なります。

-XX:MinHeapFreeRatio=percent

GCイベント後の空きヒープ領域の最小許容率(0から100)を設定します。空きヒープ領域がこの値を下回った場合、ヒープが拡張されます。デフォルトで、この値は40%に設定されます。

次の例は、最小空きヒープ率を25%に設定する方法を示しています。

-XX:MinHeapFreeRatio=25
-XX:MinRAMPercentage=percent

小さいヒープ用の-XX:MaxRAMオプションで説明されているとおり、人間工学に基づくヒューリスティックを最大量の割合として適用する前に、JVMがJavaヒープに使用できるメモリーの最大量を設定します。小さいヒープは、約125 MBのヒープです。デフォルト値は50%です。

次の例は、小さいヒープ用のJavaヒープに使用されるメモリーの最大量の割合を設定する方法を示しています:

-XX:MinRAMPercentage=75
-XX:NewRatio=ratio

Young世代のサイズとOld世代のサイズの比率を設定します。デフォルトでは、このオプションは2に設定されます。次の例は、Young/Oldの比率を1に設定する方法を示しています。

-XX:NewRatio=1
-XX:NewSize=size

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と同等です。

-XX:ParallelGCThreads=threads

Young世代とOld世代の、パラレル・ガベージ・コレクションに使用されるスレッド数を設定します。デフォルト値は、JVMに使用可能なCPUの数によって異なります。

たとえばパラレルGCのスレッド数を2に設定するには、次のオプションを指定します。

-XX:ParallelGCThreads=2
-XX:+ParallelRefProcEnabled

パラレル参照処理を有効にします。デフォルトでは、このオプションは無効になっています。

-XX:+PrintAdaptiveSizePolicy

適応型世代サイズ変更に関する情報の出力を有効にします。デフォルトでは、このオプションは無効になっています。

-XX:+PrintGC

すべてのGCでメッセージの出力を有効にします。デフォルトでは、このオプションは無効になっています。

-XX:+PrintGCApplicationConcurrentTime

最後の一時停止(GCの一時停止など)から経過した時間の出力を有効にします。デフォルトでは、このオプションは無効になっています。

-XX:+PrintGCApplicationStoppedTime

一時停止(GCの一時停止など)が続いた時間の出力を有効にします。デフォルトでは、このオプションは無効になっています。

-XX:+PrintGCDateStamps

すべてのGCで日付スタンプの出力を有効にします。デフォルトでは、このオプションは無効になっています。

-XX:+PrintGCDetails

すべてのGCで詳細メッセージの出力を有効にします。デフォルトでは、このオプションは無効になっています。

-XX:+PrintGCTaskTimeStamps

個々のすべてのGCワーカー・スレッド・タスクのタイム・スタンプの出力を有効にします。デフォルトでは、このオプションは無効になっています。

-XX:+PrintGCTimeStamps

すべてのGCでのタイムスタンプの出力を有効にします。デフォルトでは、このオプションは無効になっています。

-XX:+PrintStringDeduplicationStatistics

詳細な重複除外統計を印刷します。デフォルトでは、このオプションは無効になっています。-XX:+UseStringDeduplicationオプションを参照してください。

-XX:+PrintTenuringDistribution

殿堂入りの年齢情報の出力を有効にします。次は、出力例です。

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以下のオブジェクトの累積サイズです。

デフォルトでは、このオプションは無効になっています。

-XX:+ScavengeBeforeFullGC

各フルGCの前にYoung世代のGCを有効にします。このオプションは、デフォルトで有効になっています。フルGCの前にYoung世代を清掃することによって、Old世代の領域からYoung世代の領域に到達可能なオブジェクト数を削減できるため、Oracleではそれを無効にしないことをお薦めします。各フルGCの前にYoung世代のGCを無効にするには、-XX:-ScavengeBeforeFullGCを指定します。

-XX:SoftRefLRUPolicyMSPerMB=time

ソフトに到達可能なオブジェクトが最後に参照された後にヒープで有効なまま維持される時間の量(ミリ秒単位)を設定します。デフォルト値は、ヒープ内の空きメガバイト当たり1秒の寿命です。-XX:SoftRefLRUPolicyMSPerMBオプションは、現在のヒープ・サイズ(Java HotSpot Client VMの場合)または最大許容ヒープ・サイズ(Java HotSpot Server VMの場合)の1メガバイト当たりのミリ秒を表す整数値を受け付けます。この違いは、Client VMがヒープを拡大するより、ソフト参照をフラッシュする傾向があり、Server VMがソフト参照をフラッシュするより、ヒープを拡大する傾向があることを意味します。後者の場合、-Xmxオプションの値は、ソフト参照がガベージ・コレクションされる速さに大きく影響します。

次の例は、値を2.5秒に設定する方法を示しています。

-XX:SoftRefLRUPolicyMSPerMB=2500
-XX:StringDeduplicationAgeThreshold=threshold

指定した期間に到達しつつあるStringオブジェクトは、重複除外の候補とみなされます。オブジェクトの期間は、オブジェクトがガベージ・コレクションで存続した回数の測定値です。これは、殿堂入りと呼ばれる場合もあります。-XX:+PrintTenuringDistributionオプションを参照してください。この期間に到達する前に古いヒープ・リージョンに昇格されたStringオブジェクトは、常に重複除外の候補とみなされます。このオプションのデフォルト値は3です。-XX:+UseStringDeduplicationオプションを参照してください。

-XX:SurvivorRatio=ratio

Eden領域サイズとSurvivor領域サイズの比率を設定します。デフォルトでは、このオプションは8に設定されます。次の例は、Eden/Survivor領域率を4に設定する方法を示しています。

-XX:SurvivorRatio=4
-XX:TargetSurvivorRatio=percent

Youngガベージ・コレクション後に使用されるSurvivor領域の目的のパーセンテージ(0から100)を設定します。デフォルトで、このオプションは50%に設定されます。

次の例は、ターゲットのSurvivor領域率を30%に設定する方法を示しています。

-XX:TargetSurvivorRatio=30
-XX:TLABSize=size

スレッドローカル割当てバッファ(TLAB)の初期サイズ(バイト単位)を設定します。キロバイトを指定するには文字kまたはK、メガバイトを指定するには文字mまたはM、ギガバイトを指定するには文字gまたはGを付けます。このオプションが0に設定されている場合、JVMは初期サイズを自動的に選択します。

次の例は、初期TLABサイズを512Kバイトに設定する方法を示しています。

-XX:TLABSize=512k
-XX:+UseAdaptiveSizePolicy

適応型世代サイズ変更の使用を有効にします。このオプションは、デフォルトで有効になっています。適応型世代サイズ変更を無効にするには、-XX:-UseAdaptiveSizePolicyを指定し、メモリー割当てプールのサイズを明示的に設定します(-XX:SurvivorRatioオプションを参照)。

-XX:+UseCMSInitiatingOccupancyOnly

CMSコレクタの開始の唯一の基準として、占有率値の使用を有効にします。デフォルトでは、このオプションは無効になっており、その他の基準を使用できます。

-XX:+UseConcMarkSweepGC

Old世代のCMSガベージ・コレクタの使用を有効にします。スループット(-XX:+UseParallelGC)ガベージ・コレクタによってアプリケーションの待機時間要件を満たすことができない場合、OracleではCMSガベージ・コレクタを使用することをお薦めします。G1ガベージ・コレクタ(-XX:+UseG1GC)は別の代替方法です。

デフォルトで、このオプションは無効にされており、マシンの構成とJVMのタイプに基づいて、コレクタが自動的に選択されます。このオプションが有効にされている場合、-XX:+UseParNewGCオプションが自動的に設定されますが、それは無効にしてください。-XX:+UseConcMarkSweepGC -XX:-UseParNewGCのオプションの組合わせはJDK 8で非推奨になったためです。

-XX:+UseG1GC

ガベージファースト(G1)・ガベージ・コレクタの使用を有効にします。それは、大容量のRAMを搭載するマルチプロセッサ・マシンを対象とした、サーバースタイル・ガベージ・コレクタです。GC一時停止時間目標を高い確率で満たしながら、優れたスループットを維持します。大きなヒープ(およそ6Gバイト以上のサイズ)を必要とし、GC待機時間の制限の要件(0.5秒未満の安定した予測可能な一時停止時間)のあるアプリケーションには、G1コレクタをお薦めします。

デフォルトで、このオプションは無効にされており、マシンの構成とJVMのタイプに基づいて、コレクタが自動的に選択されます。

-XX:+UseGCOverheadLimit

OutOfMemoryError例外がスローされるまでに、GCへのJVMによって費やされる時間の割合を制限するポリシーを使用できます。このオプションはデフォルトで有効にされ、合計時間の98%がガベージ・コレクションで費やされ、復元されるヒープが2%未満である場合に、パラレルGCはOutOfMemoryErrorをスローします。ヒープが小さい場合、この機能は、アプリケーションが長時間ほとんどまたはまったく進捗なしで実行することを防ぐために使用できます。このオプションを無効にするには、-XX:-UseGCOverheadLimitを指定します。

-XX:+UseNUMA

アプリケーションの待機時間の短いメモリーの使用を増やすことで、NUMA (Non-Uniform Memory Architecture)を使用したマシン上のアプリケーションのパフォーマンスの最適化を有効にします。デフォルトでは、このオプションは無効になっており、NUMAの最適化は行われません。このオプションは、パラレル・ガベージ・コレクタが使用されている場合(-XX:+UseParallelGC)にのみ使用できます。

-XX:+UseParallelGC

複数のプロセッサを利用することによってアプリケーションのパフォーマンスを向上させるために、Parallel Scavengeガベージ・コレクタ(スループット・コレクタとも呼ばれる)の使用を有効にします。

デフォルトで、このオプションは無効にされており、マシンの構成とJVMのタイプに基づいて、コレクタが自動的に選択されます。これを有効にすると、-XX:+UseParallelOldGCオプションも明示的に無効にしないかぎりは自動的に有効になります。

-XX:+UseParallelOldGC

フルGCのパラレル・ガベージ・コレクタの使用を有効にします。デフォルトでは、このオプションは無効になっています。それを自動的に有効にすると、-XX:+UseParallelGCオプションが有効になります。

-XX:+UseParNewGC

Young世代のコレクションにパラレル・スレッドの使用を有効にします。デフォルトでは、このオプションは無効になっています。-XX:+UseConcMarkSweepGCオプションを設定すると、それが自動的に有効になります。-XX:+UseConcMarkSweepGCオプションを使用せずに-XX:+UseParNewGCオプションを使用することは、JDK 8で非推奨になりました。

-XX:+UseSerialGC

シリアル・ガベージ・コレクタの使用を有効にします。これは一般に、ガベージ・コレクションの特別な機能を必要としない小さく単純なアプリケーションには最適な選択です。デフォルトで、このオプションは無効にされており、マシンの構成とJVMのタイプに基づいて、コレクタが自動的に選択されます。

-XX:+UseSHM

Linuxでは、JVMで共有メモリーを使用してラージ・ページを設定できるようにします。

詳細は、「ラージ・ページ」を参照してください。

-XX:+UseStringDeduplication

文字列の重複除外を有効化します。デフォルトでは、このオプションは無効になっています。このオプションを使用するには、ガベージファースト(G1)・ガベージ・コレクタを有効にする必要があります。-XX:+UseG1GCオプションを参照してください。

多くのStringオブジェクトが同じであるということから、String deduplicationにより、Javaヒープ上のStringオブジェクトのメモリー・フットプリントが削減されます。各Stringオブジェクトが独自の文字配列をポイントするのではなく、同一のStringオブジェクトは同じ文字配列をポイントし共有できます。

-XX:+UseTLAB

Young世代の領域で、スレッドローカル割当てブロック(TLAB)の使用を有効にします。このオプションは、デフォルトで有効になっています。TLABの使用を無効にするには-XX:-UseTLABを指定します。

非推奨のオプションと削除されたオプション

これらのオプションは前のリリースに含まれていましたが、その後不要とみなされました。

-Xincgc

インクリメンタル・ガベージ・コレクションを有効にします。このオプションは置換えなくJDK 8で非推奨になりました。

-Xrunlibname

指定したデバッグ/プロファイリング・ライブラリをロードします。このオプションは-agentlibオプションによって置き換えられました。

-XX:CMSIncrementalDutyCycle=percent

並行コレクタが実行を許可されるマイナー・コレクション間の時間のパーセンテージ(0から100)を設定します。-XX:+CMSIncrementalModeオプションの非推奨に続いて、このオプションは置換えなくJDK 8で非推奨になりました。

-XX:CMSIncrementalDutyCycleMin=percent

-XX:+CMSIncrementalPacingが有効にされている場合に、デューティ・サイクルの下限であるマイナー・コレクション間の時間のパーセンテージ(0から100)を設定します。-XX:+CMSIncrementalModeオプションの非推奨に続いて、このオプションは置換えなくJDK 8で非推奨になりました。

-XX:+CMSIncrementalMode

CMSコレクタのインクリメンタル・モードを有効にします。CMSIncrementalから始まるその他のオプションと一緒に、このオプションは置換えなくJDK 8で非推奨になりました。

-XX:CMSIncrementalOffset=percent

インクリメンタル・モード・デューティ・サイクルがマイナー・コレクション間の期間内に右側に移動される時間のパーセンテージ(0から100)を設定します。-XX:+CMSIncrementalModeオプションの非推奨に続いて、このオプションは置換えなくJDK 8で非推奨になりました。

-XX:+CMSIncrementalPacing

JVMの実行中に収集された統計情報に基づいたインクリメンタル・モード・デューティ・サイクルの自動調整を有効にします。-XX:+CMSIncrementalModeオプションの非推奨に続いて、このオプションは置換えなくJDK 8で非推奨になりました。

-XX:CMSIncrementalSafetyFactor=percent

デューティ・サイクルの計算時に、保守性を追加するために使用される時間(0から100)のパーセンテージを設定します。-XX:+CMSIncrementalModeオプションの非推奨に続いて、このオプションは置換えなくJDK 8で非推奨になりました。

-XX:CMSInitiatingPermOccupancyFraction=percent

GCを起動するPermanent世代の占有率(0から100)を設定します。このオプションは置換えなくJDK 8で非推奨になりました。

-XX:MaxPermSize=size

Permanent世代領域の最大サイズ(バイト単位)を設定します。このオプションはJDK 8で非推奨になり、-XX:MaxMetaspaceSizeオプションによって置き換えられました。

-XX:PermSize=size

超えた場合にガベージ・コレクションがトリガーされる、Permanent世代に割り当てられる領域(バイト単位)を設定します。このオプションはJDK 8で非推奨になり、-XX:MetaspaceSizeオプションによって置き換えられました。

-XX:+UseSplitVerifier

検証プロセスの分割を有効にします。デフォルトで、このオプションは前のリリースで有効にされており、検証は型参照(コンパイラによって実行)と型チェック(JVMランタイムによって実行)の2つのフェーズに分割されていました。このオプションはJDK 8で非推奨になり、検証はデフォルトで分割され、それを無効にする方法はなくなりました。

-XX:+UseStringCache

一般的に割り当てられる文字列のキャッシュを有効にします。このオプションは置換えなくJDK 8から削除されました。

パフォーマンス・チューニングの例

次の例は、スループットを最適化するか、またはレスポンス時間を短縮するための試験的なチューニング・フラグの使用方法を示しています。

例1 - スループットを向上させるチューニング
java -d64 -server -XX:+AggressiveOpts -XX:+UseLargePages -Xmn10g  -Xms26g -Xmx26g
例2 - レスポンス時間を短縮するチューニング
java -d64 -XX:+UseG1GC -Xms26g Xmx26g -XX:MaxGCPauseMillis=500 -XX:+PrintGCTimeStamp

大規模ページ

ヒュージ・ページとも呼ばれるラージ・ページは、標準のメモリー・ページ・サイズ(プロセッサおよびオペレーティング・システムによって異なります)よりはるかに大きいメモリー・ページです。ラージ・ページは、プロセッサのTranslation-Lookaside Bufferを最適化します。

Translation-Lookaside Buffer (TLB)は、最近使用された仮想から物理へのアドレス変換を保持するページ変換キャッシュです。TLBは、少ないシステム・リソースです。プロセッサが複数のメモリー・アクセスが必要な場合のある階層ページ表から読み取る必要があるため、TLBミスは負荷がかかる可能性があります。大きいメモリー・ページ・サイズを使用して、単一のTLBエントリで大きいメモリー範囲を表すことができます。TLB不足が少なくなり、メモリー集約型のアプリケーションのパフォーマンスが向上する可能性があります。

ただし、ラージ・ページのページ・メモリーは、システムのパフォーマンスに悪影響を与える場合があります。たとえば、大量のメモリーがアプリケーションで確保される場合、通常メモリー不足や他のアプリケーションの過剰なページングが発生し、システム全体が遅くなる可能性があります。また、長時間稼働しているシステムは、過剰な断片化が発生する可能性があります。これにより、十分な大きさのページ・メモリーを予約できない可能性があります。これが発生した場合、OSまたはJVMのいずれかが通常のページの使用に戻ります。

ラージ・ページのサポート

SolarisおよびLinuxは、ラージ・ページをサポートします。

Linux

2.6カーネルは、ラージ・ページをサポートします。一部のベンダーは、2.4ベースのリリースのコードをバックポートしています。システムがラージ・ページ・メモリーをサポートしているかどうかを確認するには、次を試行してください:

# cat /proc/meminfo | grep Huge
HugePages_Total: 0
HugePages_Free: 0
Hugepagesize: 2048 kB

出力に3つの"Huge"変数が示されている場合、システムはラージ・ページ・メモリーをサポートしていますが、構成する必要があります。コマンドが何も出力しない場合、システムはラージ・ページをサポートしていません。ラージ・ページ・メモリーを使用するシステムを構成するには、rootとしてログインして、次のステップを実行してください:

  1. オプション-XX:+UseSHM(-XX:+UseHugeTLBFSのかわり)を使用する場合、SHMMAX値を増やしてください。Javaヒープ・サイズより大きくする必要があります。4GB以下の物理RAMを使用したシステムで、次によりすべてのメモリーが共有可能になります:

    # echo 4294967295 > /proc/sys/kernel/shmmax
    
  2. オプション-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
    

注:

  • システムを再起動した後に/procに含まれる値がリセットされるので注意してください。そのため、初期化スクリプト(rc.localsysctl.confなど)で設定できます。
  • OSカーネル・パラメータ/proc/sys/kernel/shmmaxまたは/proc/sys/vm/nr_hugepagesを構成(またはサイズ変更)する場合、JavaプロセスがJavaヒープ以外の領域に対してラージ・ページを割り当てることがあります。これらのステップを使用して、次の領域に対してラージ・ページを割り当てることができます:

    • Javaヒープ

    • コード・キャッシュ

    • パラレルGCのマーキング・ビットマップ・データ構造

    その結果、Javaヒープのサイズにnr_hugepagesパラメータを構成すると、領域のサイズが非常に大きいためにJVMがラージ・ページのコード・キャッシュ領域の割当てに失敗する場合があります。


アプリケーション・クラス・データ共有

アプリケーション・クラス・データ共有(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アプリケーションで使用されるすべてのクラスを含む共有アーカイブ・ファイルを作成します。最後のステップで、共有アーカイブ・ファイルを持つアプリケーションを実行します。

  1. test.Helloアプリケーションで使用されるすべてのクラスのリストを作成します。次のコマンドは、このアプリケーションで使用されるすべてのクラスのリストを含む、hello.classlistという名前のファイルを作成します。

    java -Xshare:off -XX:+UnlockCommercialFeatures -XX:DumpLoadedClassList=hello.classlist -XX:+UseAppCDS -cp hello.jar test.Hello

    -cpパラメータがJARファイルのみを含む必要がある点に注意してください。-XX:+UseAppCDSオプションは、ディレクトリ名を含むクラス・パスをサポートしません。

  2. hello.classlist内のすべてのクラスを含む、hello.jsaという名前の共有アーカイブを作成します。

    java -XX:+UnlockCommercialFeatures -Xshare:dump -XX:+UseAppCDS -XX:SharedArchiveFile=hello.jsa -XX:SharedClassListFile=hello.classlist -cp hello.jar

    アーカイブ作成時に使用された-cpパラメータは、実行時に使用された-cpと同一(または、その接頭辞)である必要があることに注意してください。

  3. 共有アーカイブhello.jsaを持つアプリケーションtest.Helloを実行します。

    java -XX:+UnlockCommercialFeatures -Xshare:on -XX:+UseAppCDS -XX:SharedArchiveFile=hello.jsa -cp hello.jar test.Hello

    オプション-Xshare:onまたは-Xshare:autoを指定したことを確認します。

  4. 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が使用できる共有アーカイブを作成します。

  1. 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つの共有アーカイブ・ファイルを共有できます。

  2. 共有アーカイブ・ファイルを共有するすべてのアプリケーションで使用されるクラスの単一のリストを作成します。

    次のコマンドは、ファイルhello.classlistおよびhi.classlistを、1つのファイルcommon.classlistに結合します。

    cat hello.classlist hi.classlist > common.classlist

  3. 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アプリケーションで共有される共通のクラス・パス接頭辞です。

  4. 同一の共有アーカイブを持つ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

終了ステータス

一般にランチャから次の終了値が返されるのは、通常、ランチャが不正な引数、深刻なエラー、またはJVMによってスローされた例外によって呼び出された場合です。ただし、JavaアプリケーションはAPI呼出しSystem.exit(exitValue)を使用して任意の値を返すことができます。値:

  • 0: 正常終了

  • >0: エラー発生

関連項目

目次      

Copyright © 1993, 2020, Oracle and/or its affiliates. All rights reserved.