web-dev-qa-db-ja.com

Java 8のデフォルトのXmxsize

Oracleドキュメント で見つけた:

-Xmxsizeメモリ割り当てプールの最大サイズ(バイト単位)をバイト単位で指定します...デフォルト値は、システム構成に基づいて実行時に選択されます。

system configurationはどういう意味ですか?

65
Vitaly

実装とバージョンによって異なりますが、通常は使用されるVM(クライアントまたはサーバーなど、-clientおよび-serverパラメーターを参照)とシステムメモリに依存します。

多くの場合、デフォルト値は物理メモリの1/4または1GB(どちらか小さい方)です。

また、Java構成オプション(コマンドラインパラメーター)は、-Xmxを含む環境変数に「外部委託」できます。これにより、デフォルトを変更できます(つまり、新しいデフォルトを指定します)。具体的には、Java_TOOL_OPTIONS環境変数はすべてのJavaツールによってチェックされ、存在する場合に使用されます(詳細は here および here )。

次のコマンドを実行して、デフォルト値を確認できます。

Java -XX:+PrintFlagsFinal -version

これにより、リストが長くなり、-XmxMaxHeapSizeにあり、-XmsInitialHeapSizeにあります。出力をフィルタリングする(例:Linuxの|grep)か、ファイルに保存して、検索できるようにします。

112
icza

前述のように、デフォルトの-Xmxsize(最大ヒープサイズ)はシステム構成によって異なります。

Java8はXmssize(最小ヒープサイズ)の物理メモリの1/6の大きい方を取り、-Xmxsize(最大ヒープサイズ)の物理メモリの1/4の小さいほうを取ります

つまり、8GB RAMの物理メモリがある場合、Xmssizeは8 *(1/6)の大きい方と-Xmxsizeas 8 *(1/4)の小さい方になります。

デフォルトのヒープサイズを確認するには

Windows

Java -XX:+PrintFlagsFinal -version | findstr /i "HeapSize PermSize ThreadStackSize"

Linux

Java -XX:+PrintFlagsFinal -version | grep -iE 'HeapSize|PermSize|ThreadStackSize'

これらのデフォルト値は、必要な量にオーバーライドすることもできます。

29
Sarat Chandra

驚くべきことに、この質問には明確な文書化された答えがありません。おそらく、別のデータポイントが答えを探している他の人に価値を提供するでしょう。 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}
12
brianNotBob

私のUbuntu VMでは、合計RAMが1048 MBで、Java -XX:+PrintFlagsFinal -version | grep HeapSizeが印刷されています:uintx MaxHeapSize := 266338304。これは約266MBで、合計RAMの1/4です。

1
Binita Bharati

8、2019年5月現在:

JVMヒープサイズはシステム構成によって異なります。つまり、次のとおりです。

a)クライアントjvmとサーバーjvm

b)32ビットvs 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)32ビットのサーバーjvmの最大ヒープサイズは1ギガバイトで、64ビットの最大ヒープサイズは32ギガバイトです(ここでも例外があります。リンクからそれを読み取ってください)。

したがって、jvmの最大ヒープサイズは、256mbまたは1gbまたは32gb