Oracleドキュメント で見つけた:
-Xmxsizeメモリ割り当てプールの最大サイズ(バイト単位)をバイト単位で指定します...デフォルト値は、システム構成に基づいて実行時に選択されます。
system configurationはどういう意味ですか?
実装とバージョンによって異なりますが、通常は使用されるVM(クライアントまたはサーバーなど、-client
および-server
パラメーターを参照)とシステムメモリに依存します。
多くの場合、デフォルト値は物理メモリの1/4または1GB(どちらか小さい方)です。
また、Java構成オプション(コマンドラインパラメーター)は、-Xmx
を含む環境変数に「外部委託」できます。これにより、デフォルトを変更できます(つまり、新しいデフォルトを指定します)。具体的には、Java_TOOL_OPTIONS
環境変数はすべてのJavaツールによってチェックされ、存在する場合に使用されます(詳細は here および here )。
次のコマンドを実行して、デフォルト値を確認できます。
Java -XX:+PrintFlagsFinal -version
これにより、リストが長くなり、-Xmx
がMaxHeapSize
にあり、-Xms
がInitialHeapSize
にあります。出力をフィルタリングする(例:Linuxの|grep
)か、ファイルに保存して、検索できるようにします。
前述のように、デフォルトの-Xmxsize
(最大ヒープサイズ)はシステム構成によって異なります。
Java8はXmssize
(最小ヒープサイズ)の物理メモリの1/6の大きい方を取り、-Xmxsize
(最大ヒープサイズ)の物理メモリの1/4の小さいほうを取ります
つまり、8GB RAMの物理メモリがある場合、Xmssize
は8 *(1/6)の大きい方と-Xmxsize
as 8 *(1/4)の小さい方になります。
デフォルトのヒープサイズを確認するには
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}
私のUbuntu VMでは、合計RAMが1048 MBで、Java -XX:+PrintFlagsFinal -version | grep HeapSize
が印刷されています:uintx MaxHeapSize := 266338304
。これは約266MBで、合計RAMの1/4です。
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