Javaコマンドラインから-Xmxn
オプションを省略した場合は、デフォルト値が使用されます。 Javaのドキュメントによると
「デフォルト値はシステム構成に基づいて実行時に選択されます」
どのシステム構成設定がデフォルト値に影響しますか?
Windowsでは、次のコマンドを使用して、アプリケーションが実行されているシステム上のデフォルトを調べることができます。
Java -XX:+ PrintFlagsFinal -version | findstr HeapSize
オプションMaxHeapSize
(-Xmx
用)とInitialHeapSize
-Xms
を探します。
Unix/Linuxシステムでは、次のことができます。
Java -XX:+ PrintFlagsFinal -version | grep HeapSize
結果の出力はバイト単位であると思います。
によると、Garbage Collector Ergonomics [Oracle] :
初期ヒープサイズ:
マシン上のマシンの物理メモリの1/64以上、またはそれなりの最小値。 J2SE 5.0より前は、デフォルトの初期ヒープサイズは妥当な最小値であり、プラットフォームによって異なります。このデフォルトは、-Xmsコマンドラインオプションを使用して上書きできます。
最大ヒープサイズ:
物理メモリの1/4以下、または1GB。 J2SE 5.0より前のデフォルトの最大ヒープサイズは64MBでした。このデフォルトは、-Xmxコマンドラインオプションを使用して上書きできます。
更新:
Tom Andersonが彼のコメントで指摘したように、上記はサーバークラスのマシン用です。 From 5.0 JavaTM仮想マシンの人間工学 :
J2SEプラットフォームバージョン5.0では、サーバークラスのマシンと呼ばれるマシンのクラスは、次のように定義されています。
- 2台以上の物理プロセッサ
- 2Gバイト以上の物理メモリー
windowsオペレーティングシステムのバージョンを実行している32ビットプラットフォームを除く。他のすべてのプラットフォームでは、デフォルト値はバージョン1.4.2のデフォルト値と同じです。
J2SEプラットフォームのバージョン1.4.2では、デフォルトで次のように選択されていました。
- 初期ヒープサイズ4Mバイト
- 最大ヒープサイズ64Mバイト
これは Java 6 update 18 で変更されています。
1 GB 以上の物理メモリがあると仮定すると(最近ではごく一般的になっています)、それは常に物理メモリの1/4です。
Java 8は、Xmssize用の物理メモリの1/6以上(Minimum HeapSize)、-Xmxsize用の物理メモリの1/4以下(Maximum HeapSize)です。
デフォルトのJavaヒープサイズ を確認できます。
ウィンドウズ :
Java -XX:+PrintFlagsFinal -version | findstr /i "HeapSize PermSize ThreadStackSize"
- Linux :
Java -XX:+PrintFlagsFinal -version | grep -iE 'HeapSize|PermSize|ThreadStackSize'
どのシステム構成設定がデフォルト値に影響しますか?
あなたの 物理メモリとJavaのバージョン。
アーネストは正しいです。彼が投稿したリンクによると、[1]:
クライアントJVMヒープ構成の更新
クライアントJVMで...
デフォルトの最大ヒープサイズは、物理メモリの半分から最大192メガバイトまで、それ以外の物理メモリの4分の1から最大1ギガバイトまでです。
たとえば、マシンに128メガバイトの物理メモリがある場合、最大ヒープサイズは64メガバイトで、1ギガバイト以上の物理メモリの場合、最大ヒープサイズは256メガバイトになります。
プログラムがそれを必要とするのに十分なオブジェクトを作成しない限り、最大ヒープサイズは実際にはJVMによって使用されません。初期ヒープサイズと呼ばれる、はるかに少ない量がJVMの初期化中に割り当てられます。 ...
- ...
- サーバーJVMヒープ構成のエルゴノミクスは、32ビットJVMのデフォルトの最大ヒープ・サイズは1ギガバイト、4ギガバイトの物理メモリー・サイズに対応する、および64ビットの場合)を除いて、クライアントと同じになりました。 JVMは32ギガバイトで、128ギガバイトの物理メモリサイズに相当します。
[1] http://www.Oracle.com/technetwork/Java/javase/6u18-142093.html
デフォルト値はシステム構成に基づいて実行時に選択されます。
ドキュメントを見てください ページ
デフォルトのヒープサイズ
初期および最大ヒープサイズがコマンドラインで指定されていない限り、それらはマシン上のメモリの量に基づいて計算されます。
クライアントJVMのデフォルトの初期および最大ヒープサイズ
デフォルトの最大ヒープサイズは、物理メモリの半分から最大192メガバイト(MB)まで、それ以外の場合、{物理メモリの4分の1から最大1ギガバイトまでの物理メモリサイズ( GB)。
サーバーJVMのデフォルトの初期および最大ヒープサイズ
32ビットJVMでは、デフォルトの最大ヒープサイズは、4 GB以上の物理メモリがある場合は最大1 GBまで可能ですです。 64ビットJVMでは、128 GB以上の物理メモリーがある場合、デフォルトの最大ヒープサイズは最大32 GBまで可能です
どのシステム構成設定がデフォルト値に影響しますか?
フラグ-Xms(初期ヒープサイズ)および-Xmx(最大ヒープサイズ)を使用して、初期および最大ヒープサイズを指定できます。 )アプリケーションがうまく機能するために必要なヒープ量がわかっている場合は、-Xmsと-Xmxを同じ値に設定できます。
IBM JVMの場合、コマンドは以下のとおりです。
Java -verbose:sizes -version
IBM SDK for Java 8について詳しくは、以下を参照してください。 http://www-01.ibm.com/support/knowledgecenter/SSYKE2_8.0.0/com.ibm.Java.lnx.80.doc/diag/appendixes/defaults .html?lang = ja
多数のパラメーターが世代サイズに影響します。次の図は、ヒープ内のコミット済みスペースと仮想スペースの違いを示しています。仮想マシンの初期化時に、ヒープ用のスペース全体が予約されています。予約済みスペースのサイズは、-Xmx
オプションで指定できます。 -Xms
パラメーターの値が-Xmx
パラメーターの値より小さい場合、予約されているスペースのすべてが即時に仮想マシンにコミットされるわけではありません。この図では、コミットされていないスペースに「仮想」というラベルが付いています。ヒープのさまざまな部分(永続世代、永続世代、および若い世代)は、必要に応じて仮想スペースの限界まで拡張できます。
デフォルトでは、仮想マシンは各コレクションのヒープを増減して、各コレクションのライブオブジェクトに対する空き領域の割合を特定の範囲内に保とうとします。このターゲット範囲は、パラメーター-XX:MinHeapFreeRatio=<minimum>
および-XX:MaxHeapFreeRatio=<maximum>
によってパーセンテージとして設定され、合計サイズは-Xms<min>
以下および-Xmx<max>
以上で制限されます。
パラメータデフォルト値
MinHeapFreeRatio 40
MaxHeapFreeRatio 70
-Xms 3670k
-Xmx 64m
64ビットシステムのヒープサイズパラメータのデフォルト値は、約30%拡大されています。この増加は、64ビットシステム上のより大きなサイズのオブジェクトを補正するためのものです。
これらのパラメーターを使用して、世代内の空きスペースの割合が40%を下回ると、世代の最大許容サイズまで、世代は40%の空きスペースを維持するように拡張されます。同様に、空きスペースが70%を超えると、世代の最小サイズに応じて、空きスペースが70%になるように世代が縮小されます。
大規模なサーバーアプリケーションでは、これらのデフォルト設定に2つの問題がしばしば発生します。最初のヒープは小さく、多くの主要コレクションでサイズ変更する必要があるため、1つは起動が遅いことです。もっと差し迫った問題は、デフォルトの最大ヒープサイズがほとんどのサーバーアプリケーションにとって不当に小さいことです。サーバーアプリケーションの経験則は次のとおりです。
一般に、割り当ては並列化できるため、プロセッサの数を増やすにつれてメモリを増やします。
全文記事 があります
Xms
name__およびXmx
name__は、Java仮想マシン(JVM)のフラグです。
Xms
name__:initial and minimum
JVM heap size
Format
name__:-Xmx<size>[g|G|m|M|k|K]
Default Size
:-server
モード:空き物理メモリの25%、8MB以上、64MB以下-client mode
:25%の空き物理メモリ、8MB以上、16MB以下Typical Size
:-Xms128M
-Xms256M
-Xms512M
Function
name __/Effect
name __:Xms
name__サイズのメモリーの割り当てで開始Xmx
name__:maximum
JVM heap size
Format
name__:-Xmx<size>[g|G|m|M|k|K]
Default Size
:<= R27.2
Windows
name__:75%
までの総物理メモリの1GB
Linux/Solaris
:50%
までの利用可能な物理メモリの1GB
>= R27.3
Windows X64
:75%
までの総物理メモリの2GB
Linux/Solaris X64
:50%
までの利用可能な物理メモリの2GB
Windows x86
:75%
までの総物理メモリの1GB
Linux/Solaris X86
:50%
までの利用可能な物理メモリの1GB
Typical Size
:-Xmx1g
-Xmx2084M
-Xmx4g
-Xmx6g
-Xmx8g
Function
name __/Effect
name __:Xmx
name__サイズのメモリを使用できます。Xmx
name__を超えると、Java.lang.OutOfMemoryError
になります。OutOfMemoryError
name__を修正する方法?Xmx
name__の値を超えています-Xmx4g
から-Xmx8g
へ公式ドキュメントを見てください: -Xコマンドラインオプション