値が MemoryUsage クラスからクエリされたときの「コミットされた」メモリの正確な意味は何なのか興味があります。そのクラスは、「committed は、Java 仮想マシンが使用できることが保証されているメモリの量 (バイト単位) を表す」と説明しています。これは、メモリが jvm プロセスによって使用されており、Java プロセスによって解放されるまで他のプロセスで使用できないことを意味しますか、それとも Java プロセスがその量のメモリを割り当てようとすると成功することを意味しますか? ? これは実装固有のものである可能性があることは認識していますが、ホットスポットにのみ関心があります。
2 に答える
コミットされたサイズは実際に割り当てられたメモリであり、使用されたサイズは実際のデータを格納するために使用されたサイズです(〜=コミットされた場合、メジャーGCの時間であり、ヒープを増やす可能性があります)。最大サイズは、ヒープが大きくなる可能性のあるハード制限です。十分でない場合、JVMはOutOfMemoryErrorをスローします。
メモリがコミットされている場合は、間違いなく使用できます。また、JVMが(最新のOSで)より多くのメモリをコミットできない唯一の場合は、ハードウェアの仮想メモリが不足している場合です。
これらのサイズはすべて、ヒープ領域のサイズのみを示しています。JVMには他のメモリ領域(スレッドスタック、JITキャッシュなど)もあります。ヒープ領域は通常最大であり、これはおおよそプロセスフットプリントに対応します。
2つのメモ:
- コミットされたサイズが物理メモリに収まらない場合、その一部がページファイルにスワップされます。これにより、GC中に大幅な速度低下が発生します。このような場合、ヒープサイズを小さくすることで、アプリのパフォーマンスが向上します。
- 一部のオペレーティングシステムでは、メモリの二重予約が可能です。使用しようとしない限り、必要なだけ割り当てることができます(どのOSであったかを忘れた-誰かが私に記入してください)
「これは、メモリがjvmプロセスによって使用されており、他のプロセスでは使用できないことを意味しますか」が正しいものになります。したがって、JVMプロセスによって使用されるとOSが認識するメモリの量よりも少ない(または等しい)。
http://java.sun.com/j2se/1.5.0/docs/guide/management/jconsole.html(リンクするアンカーがありません)。