java(1) 基本ツール java(1)

# 名前

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**コマンドは、次のカテゴリに分類できる広範なオプションをサポートしています。

•標準オプション

•非標準オプション

•高度なランタイム・オプション

•高度なJITコンパイラ・オプション

•高度なサービスアビリティ・オプション

•高度なガベージ・コレクション・オプション

標準のオプションは、Java Virtual Machine (JVM)のすべての実装でサポートすることが保証されます。これらは、JREのバージョンの確認、クラス・パスの設定、冗長な出力の有効化などの一般的なアクションに使用されます。

標準以外のオプションは、Java HotSpot仮想マシンに固有の汎用オプションであるため、すべてのJVM実装でサポートされることは保証されず、変更される可能性があります。これらのオプションは**-X**で開始します。

拡張オプションは、不用意に使用しないことをお薦めします。これらは、特定のシステム要件を持つことが多く、システム構成パラメータへの特権アクセスが必要な場合があるJava HotSpot仮想マシン操作の特定の領域を調整するために使用される開発者オプションです。これらは、すべてのJVM実装でサポートされることは保証されず、変更される可能性があります。拡張オプションは**-XX**で始まります。

最新リリースで非推奨または削除されるオプションを追跡するために、ドキュメントの最後に非推奨で削除されたオプションという名前のセクションがあります。

ブール・オプションは、デフォルトで無効になっている機能を有効にしたり、デフォルトで有効になっている機能を無効にするために使用されます。このようなオプションは、パラメータを必要としません。ブール値**-XX**オプションは、プラス記号(**-XX:+OptionName**)を使用して有効にし、マイナス記号(**-XX:-OptionName**)を使用して無効にします。

引数が必要なオプションの場合、引数は、オプション名を空白、コロン(:)または等号(=)で区切ったものになるか、あるいは引数がオプションの後に直接続く場合もあります(正確な構文は各オプションによって異なります)。サイズをバイト単位で指定するよう求められている場合、接尾辞を使用しないか、あるいはキロバイト(KB)には接尾辞**k**または**K**、メガバイト(MB)には接尾辞**m**または**M**、ギガバイト(GB)には接尾辞**g**または**G**を使用します。たとえば、サイズを8GBに設定するには、**8g**、**8192m**、**8388608k**または**8589934592**のいずれかを引数として指定できます。パーセントの指定が必要な場合は、0から1の数値を使用します(たとえば、25%の場合は**0.25**を指定します)。

## 標準オプション

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

-agentlib:*libname*\[=*options*]

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

オプション**-agentlib:foo**を指定した場合、JVMは、**LD\_LIBRARY\_PATH**システム変数(OS Xでは、この変数は**DYLD\_LIBRARY\_PATH**になります)で指定された場所に**libfoo.so**という名前のライブラリをロードしようとします。

次の例では、スタックの深さ3で、20ミリ秒ごとにヒープ・プロファイリング・ツール(HPROF)ライブラリをロードして、サンプルのCPU情報を取得する方法を示します。

```
-agentlib:hprof=cpu=samples,interval=20,depth=3


 
```

次の例では、メイン・クラスのロード前にJVMを一時停止して、Javaデバッグ・ワイヤ・プロトコル(JDWP)ライブラリをロードして、ポート8000でのソケット接続用にリスニングする方法を示します。

```
-agentlib:jdwp=transport=dt_socket,server=y,address=8000


 
```

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

•http://docs.oracle.com/javase/8/docs/api/java/lang/instrument/package-summary.htmlにある**java.lang.instrument**パッケージの説明

•http://docs.oracle.com/javase/8/docs/platform/jvmti/jvmti.html#startingにあるJVMツール・インタフェース・ガイドのエージェントのコマンド行オプションに関する項

-agentpath:*pathname*\[=*options*]

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

-client

Java HotSpot Client VMを選択します。64ビット・バージョンのJava SE Development Kit (JDK)では、現在、このオプションは無視され、かわりにServer JVMが使用されます。

デフォルトのJVM選択は、http://docs.oracle.com/javase/8/docs/technotes/guides/vm/server-class.htmlにある サーバークラス・マシンの検出を参照してください。

-D*property*=*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**という形式の1行を含むマニフェストを持つJARファイルの名前です。

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

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

•[jar(1)](/man/enterprise-packages/corretto-8/jar.1)

•http://docs.oracle.com/javase/8/docs/technotes/guides/jar/index.htmlにあるJavaアーカイブ(JAR)ファイルのガイド

•http://docs.oracle.com/javase/tutorial/deployment/jar/index.htmlにある 「レッスン: JARファイルのプログラムのパッケージ化」

-javaagent:*jarpath*\[=*options*]

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

-jre-restrict-search

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

-no-jre-restrict-search

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

-server

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

デフォルトのJVM選択は、http://docs.oracle.com/javase/8/docs/technotes/guides/vm/server-class.htmlにある サーバークラス・マシンの検出を参照してください。

-showversion

バージョン情報を表示し、アプリケーションの実行を続行します。このオプションは**-version**オプションと同等ですが、-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**オプションと同等ですが、-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に含まれるブート・クラス・ファイルのかわりに使用されます。

JREバイナリ・コード・ライセンスに違反するため、**rt.jar**でクラスをオーバーライドする目的で、このオプションを使用するアプリケーションをデプロイしないでください。

-Xbootclasspath/a:*path*

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

JREバイナリ・コード・ライセンスに違反するため、**rt.jar**でクラスをオーバーライドする目的で、このオプションを使用するアプリケーションをデプロイしないでください。

-Xbootclasspath/p:*path*

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

JREバイナリ・コード・ライセンスに違反するため、**rt.jar**でクラスをオーバーライドする目的で、このオプションを使用するアプリケーションをデプロイしないでください。

-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

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

-Xinternalversion

**-version**オプションより詳細なJVMバージョン情報を表示してから終了します。

-Xloggc:*filename*

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

例:

```
-Xloggc:garbage-collection.log


 
```

-Xmaxjitcodesize=*size*

JITコンパイルされたコードの最大コード・キャッシュ・サイズ(バイト単位)を指定します。キロバイトを示す場合は文字**k**または**K**、メガバイトを示す場合は文字**m**または**M**、ギガバイトを示す場合は文字**g**または**G**を追加します。デフォルトでは、この値は48MBに設定されています。

```
-Xmaxjitcodesize=48m


 
```

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

-Xmixed

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

-Xmn*size*

若い世代(ナーサリ)のヒープの初期サイズおよび最大サイズ(バイト単位)を設定します。キロバイトを示す場合は文字**k**または**K**、メガバイトを示す場合は文字**m**または**M**、ギガバイトを示す場合は文字**g**または**G**を追加します。

ヒープの若い世代リージョンは新しいオブジェクトに使用されます。GCは、他のリージョンよりこのリージョンで、より頻繁に実行されます。若い世代のサイズが小さすぎる場合、多数のマイナー・ガベージ・コレクションが実行されます。サイズが大きすぎる場合、フル・ガベージ・コレクションのみが実行されますが、完了までに時間がかかることがあります。若い世代のサイズは、全体のヒープ・サイズの半分から4分の1の間にしておくことをお薦めします。

次の例では、若い世代の初期サイズおよび最大サイズを様々な単位を使用して256MBに設定する方法を示します。

```
-Xmn256m
-Xmn262144k
-Xmn268435456


 
```

若い世代のヒープの初期サイズと最大サイズの両方を設定する**-Xmn**オプションのかわりに、初期サイズの設定には**-XX:NewSize**を、最大サイズの設定には**-XX:MaxNewSize**を使用できます。

-Xms*size*

ヒープの初期サイズ(バイト単位)を設定します。指定する値は、1MBより大きい1024の倍数にする必要があります。キロバイトを示す場合は文字**k**または**K**、メガバイトを示す場合は文字**m**または**M**、ギガバイトを示す場合は文字**g**または**G**を追加します。

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

```
-Xms6291456
-Xms6144k
-Xms6m


 
```

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

-Xmx*size*

メモリー割当てプールの最大サイズ(バイト単位)を指定します。指定する値は、2MBより大きい1024の倍数にする必要があります。キロバイトを示す場合は文字**k**または**K**、メガバイトを示す場合は文字**m**または**M**、ギガバイトを示す場合は文字**g**または**G**を追加します。デフォルト値は、実行時にシステム構成に基づいて選択されます。サーバー・デプロイメントでは、**-Xms**および**-Xmx**は通常同じ値に設定されます。http://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/index.htmlの*Java SE HotSpot仮想マシンのガベージ・コレクション・チューニング・ガイド*のエルゴノミクスに関する項を参照してください。

次の例では、割り当てられたメモリーの許可される最大サイズを様々な単位を使用して80MBに設定する方法を示します。

```
-Xmx83886080
-Xmx81920k
-Xmx80m


 
```

**-Xmx**オプションは**-XX:MaxHeapSize**と同等です。

-Xnoclassgc

クラスのガベージ・コレクション(GC)を無効にします。これにより、GC時間を節約でき、アプリケーション実行中の中断が短縮されます。

起動時に**-Xnoclassgc**を指定すると、アプリケーション内のクラス・オブジェクトは、GCの間はそのまま残り、常にライブであるとみなされます。これにより、より多くのメモリーが永久に占有されることになり、注意して使用しないと、メモリー不足の例外がスローされます。

-Xprof

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

-Xrs

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()**を呼び出すなどして、ユーザー・コード側で行う必要があります。

-Xshare:*mode*

クラス・データ共有モードを設定します。このオプションで使用可能な*mode*引数は次のとおりです。

auto

可能な場合、共有クラスのデータを使用します。これは、Java HotSpot 32-Bit Client VMの場合のデフォルト値です。

on

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

off

共有クラス・データを使用しません。これは、Java HotSpot 32-Bit Server VM、Java HotSpot 64-Bit Client VMおよびJava HotSpot 64-Bit Server VMの場合のデフォルト値です。

dump

クラス・データ共有アーカイブを手動で生成します。

-XshowSettings:*category*

設定を表示して続行します。このオプションで使用可能な*category*引数は次のとおりです。

all

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

locale

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

properties

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

vm

JVMの設定を表示します。

-Xss*size*

スレッドのスタック・サイズ(バイト単位)を設定します。KBを示す場合は文字**k**または**K**、MBを示す場合は文字**m**または**M**、GBを示す場合は文字**g**または**G**を追加します。デフォルト値はプラットフォームによって異なります。

•Linux/ARM (32ビット): 320KB

•Linux/i386 (32ビット): 320KB

•Linux/x64 (64ビット): 1024KB

•OS X (64ビット): 1024KB

•Oracle Solaris/i386 (32ビット): 320KB

•Oracle Solaris/x64 (64ビット): 1024KB

•Windows: 仮想メモリーによって異なります。

次の例では、スレッド・スタック・サイズを異なる単位で1024KBに設定します。

```
-Xss1m
-Xss1024k
-Xss1048576


 
```

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

-Xusealtsigs

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

-Xverify:*mode*

バイトコード・ベリファイアのモードを設定します。バイトコードの検証は一部の問題のトラブルシューティングに役立ちますが、実行中のアプリケーションへのオーバーヘッドを増大させます。このオプションで使用可能な*mode*引数は次のとおりです。

なし

バイトコードを検証しません。これにより、起動時間が短縮され、Javaによって提供される保護も軽減されます。

remote

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

all

すべてのクラスを検証します。

## 高度なランタイム・オプション

これらのオプションは、Java HotSpot VMの実行時の動作を制御します。

-XX:+DisableAttachMechanism

JVMにツールをアタッチするメカニズムを無効にするオプションを有効にします。デフォルトでは、このオプションは無効になっており、これは、アタッチ・メカニズムを有効にすると、**jcmd**、**jstack**、**jmap**、**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:LargePageSizeInBytes=*size*

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

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

```
-XX:LargePageSizeInBytes=4m


 
```

-XX:MaxDirectMemorySize=*size*

新規I/O (**java.nio**パッケージ)の直接バッファ割当ての最大合計サイズ(バイト単位)を設定します。キロバイトを示す場合は文字**k**または**K**、メガバイトを示す場合は文字**m**または**M**、ギガバイトを示す場合は文字**g**または**G**を追加します。デフォルトでは、サイズは0に設定され、これは、JVMではNIOの直接バッファ割当てのサイズが自動的に選択されていることを意味します。

次の例では、NIOサイズを異なる単位で1024KBに設定する方法を示します。

```
-XX:MaxDirectMemorySize=1m
-XX:MaxDirectMemorySize=1024k
-XX:MaxDirectMemorySize=1048576


 
```

-XX:NativeMemoryTracking=*mode*

JVMのネイティブ・メモリー使用状況のトラッキングのモードを指定します。このオプションで使用可能な*mode*引数は次のとおりです。

off

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

summary

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

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)](/man/enterprise-packages/corretto-8/jstat.1)バイナリ・データを保存します。このバイナリ・データは**hsperfdata\_&lt;pid&gt;**という名前のファイルに保存されます。*&lt;pid&gt;*は、実行したJavaアプリケーションのプロセス識別子です。次のように**jstat**を使用して、このファイルに含まれるパフォーマンス・データを表示します。

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

-XX:+PrintCommandLineFlags

コマンド行に表示された、人間工学的に選択したJVMフラグの印刷を有効にします。これは、ヒープ領域サイズや選択されたガベージ・コレクタなど、JVMによって設定されたエルゴノミック値を確認する場合に役立ちます。デフォルトでは、このオプションは無効であり、フラグは印刷されません。

-XX:+PrintNMTStatistics

ネイティブ・メモリーのトラッキングが有効な場合に、JVMの終了時に収集されたネイティブ・メモリーのトラッキング・データの印刷を有効にします(**-XX:NativeMemoryTracking**を参照してください)。デフォルトでは、このオプションは無効であり、ネイティブ・メモリーのトラッキング・データは印刷されません。

-XX:+RelaxAccessControlCheck

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

-XX:+ShowMessageBoxOnError

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

-XX:ThreadStackSize=*size*

スレッドのスタック・サイズ(バイト単位)を設定します。キロバイトを示す場合は文字**k**または**K**、メガバイトを示す場合は文字**m**または**M**、ギガバイトを示す場合は文字**g**または**G**を追加します。デフォルト値はプラットフォームによって異なります。

•Linux/ARM (32ビット): 320KB

•Linux/i386 (32ビット): 320KB

•Linux/x64 (64ビット): 1024KB

•OS X (64ビット): 1024KB

•Oracle Solaris/i386 (32ビット): 320KB

•Oracle Solaris/x64 (64ビット): 1024KB

•Windows: 仮想メモリーによって異なります。

次の例では、スレッド・スタック・サイズを異なる単位で1024KBに設定する方法を示します。

```
-XX:ThreadStackSize=1m
-XX:ThreadStackSize=1024k
-XX:ThreadStackSize=1048576


 
```

このオプションは**-Xss**と同等です。

-XX:+TraceClassLoading

クラスがロードされるときのクラスのトレースを有効にします。デフォルトでは、このオプションは無効であり、クラスはトレースされません。

-XX:+TraceClassLoadingPreorder

クラスが参照される順序で、ロードされたすべてのクラスのトレースを有効にします。デフォルトでは、このオプションは無効であり、クラスはトレースされません。

-XX:+TraceClassResolution

定数プールの解決のトレースを有効にします。デフォルトでは、このオプションは無効であり、定数プールの解決はトレースされません。

-XX:+TraceClassUnloading

クラスがアンロードされるときのクラスのトレースを有効にします。デフォルトでは、このオプションは無効であり、クラスはトレースされません。

-XX:+TraceLoaderConstraints

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

-XX:+UseAltSigs

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

-XX:-UseBiasedLocking

バイアス・ロックの使用を無効にします。かなりの量の非競合の同期化がある一部のアプリケーションは、このフラグを有効にすると大幅な高速化が実現しますが、特定のパターンのロックがあるアプリケーションは、速度が低下することがあります。バイアス・ロックの方法の詳細は、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:+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**を追加します。最小空き領域より少ない領域しか残っていない場合、コンパイルは停止します。デフォルトでは、このオプションは500KBに設定されています。次の例では、最小空き領域を1024MBに設定する方法を示します。

```
-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コンパイラ・コマンドの読取り元のファイルを設定します。デフォルトでは、JITコンパイラによって実行されるコマンドを格納するために、**.hotspot\_compiler**ファイルが使用されます。

コマンド・ファイルの各行は、コマンドが使用されるコマンド、クラス名およびメソッド名を表します。たとえば、次の行は、**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**を追加します。デフォルト値は500KBに設定されています。初期コード・キャッシュ・サイズをシステムの最小メモリー・ページ・サイズより小さくしないでください。次の例では、初期コード・キャッシュ・サイズを32KBに設定する方法を示します。

```
-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**を追加します。このオプションは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では、新しい命令 **XBEGIN**、**XABORT**、**XEND**および**XTEST**が導入されています。**XBEGIN**および**XEND**命令は、トランザクションとして実行するための命令セットを囲みます。トランザクションの実行時に競合が見つからなかった場合、メモリーとレジスタの変更が、**XEND**命令で同時にコミットされます。**XABORT**命令ではトランザクションを明示的に中止でき、**XEND**命令では命令セットがトランザクション内で実行中かどうかを確認できます。

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

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

-XX:+UseSHA

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**などです。

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

**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の診断を目的としたオプションをアンロックします。デフォルトでは、このオプションは無効であり、診断オプションは使用できません。

## 高度なガベージ・コレクション・オプション

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

-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収集サイクルを開始する古い世代の占有率(0から100まで)を設定します。デフォルト値は-1に設定されています。負の値(デフォルトを含む)は、**-XX:CMSTriggerRatio**が開始占有率の値を定義するために使用されることを意味します。

次の例では、占有率を20%に設定する方法を示します。

```
-XX:CMSInitiatingOccupancyFraction=20


 
```

-XX:+CMSScavengeBeforeRemark

CMSコメント・ステップの前にスカベンジの試行を有効にします。デフォルトでは、このオプションは無効です。

-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ヒープを細分化するリージョンのサイズを設定します。値には、1MBから32MBまでを指定できます。デフォルトのリージョン・サイズは、ヒープ・サイズに基づいて人間工学的に決定されます。

次の例では、細分化されたサイズを16MBに設定する方法を示します。

```
-XX:G1HeapRegionSize=16m


 
```

-XX:+G1PrintHeapRegions

割り当てられたリージョンおよびG1コレクタによって再要求されたものに関する情報の印刷を有効にします。デフォルトでは、このオプションは無効です。

-XX:G1ReservePercent=*percent*

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

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

```
-XX:G1ReservePercent=20


 
```

-XX:InitialHeapSize=*size*

メモリー割当てプールの初期サイズ(バイト単位)を設定します。指定する値は、0、または1MBより大きい1024の倍数のいずれかにする必要があります。キロバイトを示す場合は文字**k**または**K**、メガバイトを示す場合は文字**m**または**M**、ギガバイトを示す場合は文字**g**または**G**を追加します。デフォルト値は、実行時にシステム構成に基づいて選択されます。http://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/index.htmlの*Java SE HotSpot仮想マシンのガベージ・コレクション・チューニング・ガイド*のエルゴノミクスに関する項を参照してください。

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

```
-XX:InitialHeapSize=6291456
-XX:InitialHeapSize=6144k
-XX:InitialHeapSize=6m


 
```

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

-XX:InitialSurvivorRatio=*ratio*

スループット・ガベージ・コレクタが使用するサバイバ領域の初期比を設定します(**-XX:+UseParallelGC**および/または**-XX:+UseParallelOldGC**オプションによって有効になります)。**-XX:+UseParallelGC**オプションおよび**-XX:+UseParallelOldGC**オプションを使用することによって、スループット・ガベージ・コレクタで適応サイズ指定をデフォルトで有効にします。初期値から始めて、アプリケーションの動作に従って、サバイバ領域がサイズ変更されます。(**-XX:-UseAdaptiveSizePolicy**オプションを使用して)適応サイズ指定を無効にした場合、**-XX:SurvivorRatio**オプションを使用して、アプリケーションの実行全体のサバイバ領域のサイズを設定する必要があります。

次の式を使用して、若い世代のサイズ(Y)およびサバイバ領域の初期比(R)に基づいて、サバイバ領域の初期サイズ(S)を計算できます。

```
S=Y/(R+2)


 
```

等式内の2は、2つのサバイバ領域を示します。サバイバ領域の初期比に指定する値を大きくすると、サバイバ領域の初期サイズは小さくなります。

デフォルトでは、サバイバ領域の初期比は8に設定されています。若い世代の領域サイズのデフォルト値(2MB)を使用した場合、サバイバ領域の初期サイズは0.2MBになります。

次の例では、サバイバ領域の初期比を4に設定する方法を示します。

```
-XX:InitialSurvivorRatio=4


 
```

-XX:InitiatingHeapOccupancyPercent=*percent*

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

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

```
-XX:InitiatingHeapOccupancyPercent=75


 
```

-XX:MaxGCPauseMillis=*time*

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

次の例では、最大ターゲット休止時間を500ミリ秒に設定する方法を示します。

```
-XX:MaxGCPauseMillis=500


 
```

-XX:MaxHeapSize=*size*

メモリー割当てプールの最大サイズ(バイト単位)を設定します。指定する値は、2MBより大きい1024の倍数にする必要があります。キロバイトを示す場合は文字**k**または**K**、メガバイトを示す場合は文字**m**または**M**、ギガバイトを示す場合は文字**g**または**G**を追加します。デフォルト値は、実行時にシステム構成に基づいて選択されます。サーバー・デプロイメントでは、**-XX:InitialHeapSize**および**-XX:MaxHeapSize**は通常同じ値に設定されます。http://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/index.htmlの*Java SE HotSpot仮想マシンのガベージ・コレクション・チューニング・ガイド*のエルゴノミクスに関する項を参照してください。

次の例では、割り当てられたメモリーの許可される最大サイズを様々な単位を使用して80MBに設定する方法を示します。

```
-XX:MaxHeapSize=83886080
-XX:MaxHeapSize=81920k
-XX:MaxHeapSize=80m


 
```

Oracle Solaris 7およびOracle Solaris 8 SPARCプラットフォームの場合のこの値の上限は、およそ4,000MBからオーバーヘッドの量を引いたものです。Oracle Solaris 2.6およびx86プラットフォームの場合の上限は、およそ2,000MBからオーバーヘッドの量を引いたものです。Linuxプラットフォームの場合の上限は、およそ2,000MBからオーバーヘッドの量を引いたものです。

**-XX:MaxHeapSize**オプションは**-Xmx**と同等です。

-XX:MaxHeapFreeRatio=*percent*

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

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

```
-XX:MaxHeapFreeRatio=75


 
```

-XX:MaxMetaspaceSize=*size*

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

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

```
-XX:MaxMetaspaceSize=256m


 
```

-XX:MaxNewSize=*size*

若い世代(ナーサリ)のヒープの最大サイズ(バイト単位)を設定します。デフォルト値は人間工学的に設定されます。

-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:NewRatio=*ratio*

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

```
-XX:NewRatio=1


 
```

-XX:NewSize=*size*

若い世代(ナーサリ)のヒープの初期サイズ(バイト単位)を設定します。キロバイトを示す場合は文字**k**または**K**、メガバイトを示す場合は文字**m**または**M**、ギガバイトを示す場合は文字**g**または**G**を追加します。

ヒープの若い世代リージョンは新しいオブジェクトに使用されます。GCは、他のリージョンよりこのリージョンで、より頻繁に実行されます。若い世代のサイズが小さすぎる場合、多数のマイナーGCが実行されます。サイズが大きすぎる場合、フルGCのみが実行されますが、完了までに時間がかかることがあります。若い世代のサイズは、全体のヒープ・サイズの半分から4分の1の間にしておくことをお薦めします。

次の例では、若い世代の初期サイズを様々な単位を使用して256MBに設定する方法を示します。

```
-XX:NewSize=256m
-XX:NewSize=262144k
-XX:NewSize=268435456


 
```

**-XX:NewSize**オプションは**-Xmn**と同等です。

-XX:ParallelGCThreads=*threads*

若い世代と古い世代でパラレル・ガベージ・コレクションに使用するスレッドの数を設定します。デフォルト値は、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オブジェクトは、最も若いサバイバです(前のスカベンジの後に作成され、最新のスカベンジで存続し、Eden領域からサバイバ領域に移動しました)。期間2オブジェクトは、2つのスカベンジで存続します(2番目のスカベンジ中に、あるサバイバ領域から次の領域にコピーされました)。このように続きます。

前述の例では、28,992,024バイトが1つのスカベンジで存続し、Eden領域からサバイバ領域にコピーされました。1,366,864バイトは期間2オブジェクトなどにより占有されています。各行の3番目の値は、期間n以下のオブジェクトの累積サイズです。

デフォルトでは、このオプションは無効です。

-XX:+ScavengeBeforeFullGC

それぞれのフルGCの前に若い世代のGCを有効にします。このオプションはデフォルトで有効になっています。フルGCの前に若い世代のスカベンジを行うと、古い世代領域から若い世代領域へのアクセスが可能なオブジェクトの数を減らすことができるため、これを無効に*しない*ことをお薦めします。各フルGCの前に若い世代の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領域のサイズとサバイバ領域のサイズとの比率を設定します。デフォルトでは、このオプションは8に設定されています。次の例では、Eden/サバイバ領域の比率を4に設定する方法を示します。

```
-XX:SurvivorRatio=4


 
```

-XX:TargetSurvivorRatio=*percent*

若いガベージ・コレクションの後に使用されるサバイバ領域の目的の割合(0から100まで)を設定します。デフォルトでは、このオプションは50%に設定されています。

次の例では、ターゲットのサバイバ領域の比率を30%に設定する方法を示します。

```
-XX:TargetSurvivorRatio=30


 
```

-XX:TLABSize=*size*

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

次の例では、TLABの初期サイズを512KBに設定する方法を示します。

```
-XX:TLABSize=512k


 
```

-XX:+UseAdaptiveSizePolicy

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

-XX:+UseCMSInitiatingOccupancyOnly

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

-XX:+UseConcMarkSweepGC

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

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

-XX:+UseG1GC

ガベージファースト(G1)・ガベージ・コレクタの使用を有効にします。これはサーバー形式のガベージ・コレクタで、大量のRAMを持つマルチプロセッサ・マシンを対象としています。高い確率でGC休止時間の目標を達成し、同時に適切なスループットも維持します。G1コレクタは、GC待機時間の限定された要件(安定した予測可能な0.5秒未満の休止時間)を持つ、大きいヒープ(約6GB以上のサイズ)が必要なアプリケーションに推奨されます。

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

-XX:+UseGCOverheadLimit

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

-XX:+UseNUMA

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

-XX:+UseParallelGC

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

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

-XX:+UseParallelOldGC

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

-XX:+UseParNewGC

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

-XX:+UseSerialGC

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

-XX:+UseSHM

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

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

-XX:+UseStringDeduplication

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

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

-XX:+UseTLAB

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

## 非推奨で削除されたオプション

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

-Xincgc

インクリメンタル・ガベージ・コレクションを有効にします。このオプションはJDK 8では非推奨で、それに代わるものはありません。

-Xrun*libname*

指定したデバッグ/プロファイリングのライブラリをロードします。このオプションは、**-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を開始する永久世代占有率(0から100まで)を設定します。このオプションはJDK 8では非推奨で、それに代わるものはありません。

-XX:MaxPermSize=*size*

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

-XX:PermSize=*size*

超えた場合にはガベージ・コレクションをトリガーする、永久世代に割り当てられた領域(バイト単位)を設定します。このオプションは、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は、ラージ・ページをサポートします。

**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**としてログインして、次の手順を実行してください:

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


 
```

**注記**

注意 4 • システムを再起動した後に**/proc**に含まれる値がリセットされるので注意してください。そのため、初期化スクリプト(**rc.local**や**sysctl.conf**など)で設定できます。 4 • OSカーネル・パラメータ**/proc/sys/kernel/shmmax**または**/proc/sys/vm/nr\_hugepages**を構成(またはサイズ変更)する場合、JavaプロセスがJavaヒープ以外の領域に対してラージ・ページを割り当てることがあります。これらの手順を使用して、次の領域に対してラージ・ページを割り当てることができます: 4 • Javaヒープ 4 • Permanent世代 4 • コード・キャッシュ 4 • パラレルGCのマーキング・ビットマップ・データ構造 その結果、Javaヒープのサイズに**nr\_hugepages**パラメータを構成すると、領域のサイズが非常に大きいためにJVMがPermanent世代およびラージ・ページのコード・キャッシュ領域の割当てに失敗する場合があります。

# 終了ステータス

通常、次の終了値が起動ツールから返されるのは、起動元が不正な引数で呼び出されたか、深刻なエラーが発生したか、あるいはJVMにより例外がスローされた場合です。ただし、Javaアプリケーションは、API呼出し**System.exit(exitValue)**を使用して任意の値を返すことを選択することもできます。値は次のとおりです。

•**0**: 正常終了

•**&gt;0**: エラー発生

# 関連項目

•[javac(1)](/man/enterprise-packages/corretto-8/javac.1)

•[jdb(1)](/man/enterprise-packages/corretto-8/jdb.1)

•[javah(1)](/man/enterprise-packages/corretto-8/javah.1)

•[jar(1)](/man/enterprise-packages/corretto-8/jar.1)

•[jstat(1)](/man/enterprise-packages/corretto-8/jstat.1)

2015年3月3日 JDK 8

---

Document: java(1) from corretto-8 8.512.09.1-r0 (Chainguard OS)
Source: https://github.com/corretto/corretto-8
