Java SE 6(つまり、-Xmxの設定と同等)からのSunのJVMのデフォルトの最大ヒープサイズは?
Java SE 5とサーバークラスのマシン、 it's
物理メモリの1/4または1GBより小さい。
おまけの質問:IBMのJVMでできること 質問
Java -verbose:sizes -version
同様にSunのJVMに質問できますか?
編集:
Runtime.getRuntime()。maxMemoryを使用して、 Sun documentation で参照されているmin(physical memory/4、1G)を確認しました。
Java 1.6.0_21以降、...
$ Java -XX:+PrintFlagsFinal -version 2>&1 | grep MaxHeapSize
uintx MaxHeapSize := 12660904960 {product}
Min(1G)が削除されたようです。
または、findstrを使用するWindowsで
C:\>Java -XX:+PrintFlagsFinal -version 2>&1 | findstr MaxHeapSize
Javaコード:
long maxBytes = Runtime.getRuntime().maxMemory();
System.out.println("Max memory: " + maxBytes / 1024 / 1024 + "M");
javadoc を参照してください。
JDKでは、jinfoを使用して、問題の<PROCESS_ID>
のJVMに接続し、MaxHeapSizeの値を取得することもできます。
jinfo -flag MaxHeapSize <PROCESS_ID>
JDK6U18現在、ヒープサイズの構成は次のとおりです。
クライアントJVMでは、デフォルトのJavaヒープ構成が変更され、今日のリッチクライアントアプリケーションのパフォーマンスが向上しました。初期および最大ヒープサイズが大きくなり、世代別ガベージコレクションに関連する設定が調整されました。
デフォルトの最大ヒープサイズは、物理メモリの半分から最大192メガバイトの物理メモリまでで、それ以外の場合は物理メモリの4分の1から最大1ギガバイトまでです。たとえば、マシンに128メガバイトの物理メモリがある場合、最大ヒープサイズは64メガバイトであり、1ギガバイト以上の物理メモリの結果、最大ヒープサイズは256メガバイトになります。プログラムがそれを必要とするのに十分なオブジェクトを作成しない限り、JVMは実際に最大ヒープサイズを使用しません。 JVMの初期化中に、初期ヒープサイズと呼ばれるはるかに少ない量が割り当てられます。この量は少なくとも8メガバイトであり、それ以外の場合は物理メモリーの1/64から最大1ギガバイトの物理メモリーです。
ソース: http://www.Oracle.com/technetwork/Java/javase/6u18-142093.html
1つの方法は、jdkがインストールされている場合、binフォルダーにjconsoleと呼ばれるユーティリティがあります(visualvmを使用することもできます)。それを起動して、関連するJavaプロセスに接続すると、ヒープサイズの設定とその他の多くの詳細を確認できます。
ヘッドレスまたはcliのみを実行している場合、問題のサービスを開始するときに接続するポートを指定すると、lan上でjConsoleを使用できます。
この質問に答えるには、Java VMがCLIENTまたはSERVERモードにあるかどうかが重要です。「-client」または「-server」オプションを指定できます。 Javaは内部ルールを使用します。基本的にwin32は常にクライアントであり、Linuxは常にサーバーですが、次の表を参照してください。
http://docs.Oracle.com/javase/6/docs/technotes/guides/vm/server-class.html
Sun/Oracle jre6u18のドキュメントによれば、クライアントは次のように述べています:VMは、マシンが192MB未満の場合は物理メモリの1/2、マシンが1Gb未満の場合はメモリの1/4、最大256Mb 2Gb phys mem、Java 256Mbが割り当てられ、ドキュメントと一致する32MB WindowsXPシステムでの私のテスト。
Sun/Oracle jre6u18のドキュメントでは、re server:clientと同じですが、わかりにくい言語が追加されています:32ビットJVMの場合、デフォルトの最大値は1Gb、64ビットJVMの場合、デフォルト値は32Gbです。 8Gb物理の64ビットLinuxマシンでの私のテストでは、Javaは物理の1/4である2Gbを割り当てます。128Gb物理の64ビットLinuxマシンではJava =再び物理の1/4の32Gbを割り当てます。
このおかげでSO私を導くための投稿: