1
java -Xmx100G -Xms100G Hello
私のMacBook Proは8GBのRAMしか搭載していないため、JVMは100Gのヒープサイズで起動できますか? なぜ物理メモリのサイズを超えるヒープサイズを指定できますか?
java -Xmx100G -Xms100G Hello
私のMacBook Proは8GBのRAMしか搭載していないため、JVMは100Gのヒープサイズで起動できますか? なぜ物理メモリのサイズを超えるヒープサイズを指定できますか?
(OSXを含む)ほとんどのオペレーティングシステムがサポート仮想メモリので、これは起こることができる理由があります。この場合、プロセスはオペレーティングシステムにそのスペースを要求し、利用可能なスペースがあると思われるものが返されます。ただし、メモリはページのに分割されています(これはチャンクで提供されます)。オペレーティングシステムは、実際に使用されたときにそれらのページを実際のメモリで満たします。 JVMがますます多くのページを使用し始めると、それらは物理メモリに最初にマッピングされ、メモリが物理メモリに収まらないときは、スワップのメモリページがディスクに書き出されます。ディスクがなくなり、プロセスが限界に達すると、プロセスは終了します)。
これはJVMに固有のものではありません。他のプロセスも同じように動作します。
私はJVMが起動時に 'heap = malloc(1000GB)'のようなことをすると思っていました。プロセスが 'malloc(1MB)'を呼び出すと、この1MBのメモリが占有され、他のプロセスはそれを使用できません。そうですか? – Neo
オリジナルのJVMはこれを正確に実行しましたが、G1GCはやや異なる方法で動作します。しかし、Cプログラムでもmalloc(1000Gb)を実行して成功させることができます。仮想メモリ空間は、ページが使用されていないため、その時点での数字に過ぎません。実際のメモリをバーチャルに使用していることを示す上部またはそれに類似するものを見ると、使用状況を見ることができます: 'PhysMem:7643M used(1846M有線)、541M未使用。 VM:841G vsize' – AlBlue
ありがとうございました! – Neo