Java仮想マシン(jvm)のメモリの最適設定方法
JVMの最適なメモリの設定は、アプリケーションの特性とサーバーのハードウェア構成によって異なります。以下に、推奨される最適なメモリの設定を紹介します。
- 起動時にJVMに割り当てる初期ヒープサイズを指定します(-Xms)。最大ヒープサイズの1/4~1/8に設定することを推奨します。
- 最大ヒープサイズ( -Xmx ):JVM が割り当てるヒープの最大サイズを指定します。アプリケーションのメモリ要件とサーバーの利用可能なメモリに基づいて設定する必要があります。通常、サーバーの利用可能なメモリの 70~80% に設定することをお勧めします。
- 若い世代のサイズ(-Xmn):JVMの若い世代のサイズを指定します。若い世代はオブジェクトを作成および破棄する領域であり、そのサイズはガベージコレクションのパフォーマンスに影響を与えます。ヒープサイズの3分の1または4分の1に設定することをお勧めします。
- 恒久領域サイズ(-XX:MaxPermSize):恒久領域のサイズを指定します。恒久領域はクラスのメタデータ情報を格納するために使用されます。Java 8以降では、恒久領域はメタスペース(Metaspace)に置き換えられました。256mなど、大きな値に設定することを推奨します。
- ヒープ外のメモリーサイズ(-XX:MaxDirectMemorySize): JVM で使用できるヒープ外のメモリーのサイズを指定します。ヒープ外のメモリーは直接メモリーを割り当てるために使用され、パフォーマンスを向上させることができます。大きな値(512m など)に設定することを推奨します。
- 新生世代と古世代の割合(-XX:NewRatio):若者世代と古世代の割合を指定します。デフォルト値は2で、若者世代と古世代の割合は1:2です。アプリケーションのメモリアクセスモードとパフォーマンス要求に応じて調整できます。
- GC アルゴリズム(-XX:+UseConcMarkSweepGC):JVM が使用するガベージコレクションアルゴリズムを指定します。長時間実行されるアプリケーションでは、コンカレントマークアンドスイープ(CMS)アルゴリズムを使用することをおすすめします。
- GC一時停止時間目標(-XX:MaxGCPauseMillis):ガベージコレクタの一時停止時間目標を指定します。アプリケーションのパフォーマンス要件に応じて調整できます。
- ガベージコレクションの並列スレッド数(-XX:ParallelGCThreads):ガベージコレクタが使用するスレッド数を指定します。サーバーのCPUコア数に合わせて調整できます。
具体的な構成は、アプリケーションのニーズとサーバーのハードウェア構成によって調整する必要がある、一般的な JVM の推奨メモリーパラメータ構成を以下に示します。