では、OracleのマニュアルIが見つかりました:
-Xmxsizeメモリ割り当てプールの最大サイズ(バイト単位)をバイト単位で指定します...デフォルト値は、システム構成に基づいて実行時に選択されます。
システム構成とはどういう意味ですか?
では、OracleのマニュアルIが見つかりました:
-Xmxsizeメモリ割り当てプールの最大サイズ(バイト単位)をバイト単位で指定します...デフォルト値は、システム構成に基づいて実行時に選択されます。
システム構成とはどういう意味ですか?
-Xmx
、少なくともJava 8では当てはまらないようです。これは、合計メモリが6GbのLinux 64ビットシステムでは、デフォルトで-Xmx = 1.5Gbのjvmがあるためです。
回答:
それは、実装やバージョンによって異なりますが、通常はVMが(例えばクライアントまたはサーバーを使用に依存-client
し、-server
パラメータ)と、システムメモリ上。
多くの場合client
、デフォルト値は物理メモリの1/4または1GB(どちらか小さい方)です。
また、Java構成オプション(コマンドラインパラメーター)は-Xmx
、を含む環境変数に「アウトソーシング」することができます。これにより、デフォルトを変更できます(つまり、新しいデフォルトを指定できます)。具体的には、JAVA_TOOL_OPTIONS
環境変数はすべてのJavaツールによってチェックされ、存在する場合は使用されます(詳細はこちらとこちら)。
次のコマンドを実行して、デフォルト値を確認できます。
java -XX:+PrintFlagsFinal -version
それは、あなたにloooongリストを与える-Xmx
であるMaxHeapSize
、-Xms
ですInitialHeapSize
。出力をフィルタリングする|grep
か(Linuxなど)、ファイルに保存して検索できるようにします。
java -XX:+PrintCommandLineFlags
現在のシステム情報に基づいてJVMによって選択されたヒープサイズ(およびその他の情報)を印刷するために実行できます
-XX:+PrintFlagsFinal
、あなたが提案したものは私には機能しません。答えにそれを追加します。
-XX:+PrintFlagsFinal
が、すべてが考慮された後にすべての情報が表示されるはずなので、申し訳ありません(手動オプションと人間工学を含む)。けれども-XX:+PrintCommandLineFlags
私のJVM上で動作するようです(正確なバージョンに依存する場合があります)
java -XX:+PrintFlagsFinal -version | grep HeapSize
あなたが言及したように、デフォルト-Xmxsize
(最大ヒープサイズ)はシステム構成に依存します。
Java8client
は、物理メモリの1/64の大きい方Xmssize
(最小HeapSize)を使用し、物理メモリの1/4の小さい方-Xmxsize
(最大HeapSize)を使用します。
つまり、8GB RAMの物理メモリがある場合Xmssize
、大きい方は8 *(1/6)、小さい方は-Xmxsize
8 *(1/4)になります。
デフォルトのHeapSizeを確認できます
Windows:
java -XX:+PrintFlagsFinal -version | findstr /i "HeapSize PermSize ThreadStackSize"
Linux:
java -XX:+PrintFlagsFinal -version | grep -iE 'HeapSize|PermSize|ThreadStackSize'
これらのデフォルト値は、必要な量に上書きすることもできます。
驚いたことに、この質問には明確な文書化された答えがありません。おそらく、別のデータポイントが、答えを探している他の人に価値を提供するでしょう。CentOS(6.8,7.3)とJava 8(ビルド1.8.0_60-b27、64ビットサーバー)を実行している私のシステムでは:
デフォルトのメモリは物理メモリの1/4で、1GBに制限されません。
また、-XX:+PrintFlagsFinal
STDERRに出力するため、上記の他のユーザーが提示した現在のデフォルトメモリを判別するコマンドを次のように調整する必要があります。
java -XX:+PrintFlagsFinal 2>&1 | grep MaxHeapSize
以下は、64GBの物理RAMを搭載したシステムで返されます。
uintx MaxHeapSize := 16873684992 {product}
2019年5月8日現在:
JVMヒープサイズは、システム構成によって異なります。つまり、次のようになります。
a)クライアントjvmとサーバーjvm
b)32ビットと64ビット。
リンク:
1)J2SE5.0からの更新:https://docs.oracle.com/javase/6/docs/technotes/guides/vm/gc-ergonomics.html
2)簡単な回答:https://docs.oracle.com/ javase / 8 / docs / technotes / guides / vm / gctuning / ergonomics.html
3)詳細な回答:https://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/parallel.html# default_heap_size
4)クライアントとサーバー:https://www.javacodegeeks.com/2011/07/jvm-options-client-vs-server.html
要約:( 上記のリンクから理解するのは難しいので、ここに要約します)
1)クライアントjvmのデフォルトの最大ヒープサイズは256mbです(例外があり、上記のリンクから読み取られます)。
2)サーバーjvmのデフォルトの最大ヒープサイズは32ビットで1 GB、64ビットで32 GBです(ここでも例外があります。リンクから読んでください)。
したがって、デフォルトの最大jvmヒープサイズは、上記のVMに応じて256mbまたは1gbまたは32gbです。