free -m
私のシステムには以下が表示されます。
total used free shared buffers cached
Mem: 3954 3842 111 0 248 2585
-/+ buffers/cache: 1008 2945
Swap: 3811 4 3807
したがって、メモリが使い果たされているように見えますが、top
メモリごとに並べ替えると、次の親プロセスが表示されます。
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
8891 minecraf 20 0 2374m 277m 9.9m S 1 7.0 0:12.21 java
8704 root 39 19 2802m 272m 11m S 0 6.9 0:28.73 java
Javaで使用されている仮想メモリは膨大なようですが、オンラインで読むと問題はありません。だから私の質問はこんな感じです。free
そう言えない場合は、なぜ仮想メモリを表示するのですか?
答え1
「Mem」行にはfree
仮想メモリ使用量が表示されず、物理メモリ使用量が表示されます。
の「RES」(住民用)と「%MEM」の列はtop
同じ内容を示しています。物理各プロセスで使用されるメモリです。
free
する使用可能なスワップ領域と使用されたスワップ領域を表示し、top
「VIRT」列があります。どちらも重要です。おおまかに言えば、スワップ空間に物理メモリを加えることが可能な総仮想メモリ空間です。その制限に達すると、プロセスが終了するか、メモリ割り当てが失敗し始め、状況が悪くなります。
答え2
仮想メモリをファイルまたはライブラリにマッピングできるため、VIRTの量が非常に大きくなる可能性があります。私は〜6gのVIRTメモリを使用していますが、RESidentが59mの小さなJavaアプリケーションを実行しています。
Javaで使用する仮想メモリがものすごく大きいようですが、オンラインで読んでみると問題にならないそうです。
仮想メモリがそれほど重要ではないのは、使用されていない場合、または使用可能な常駐メモリが必要な場合にスワップ領域(ハードディスクストア)にページアウトされるためです。スワップ空間にあるものはほとんど使用されていないか、まったく使用されていませんが、どこかで参照されるためです。 64ビットオペレーティングシステムを使用している場合は、使用するよりも多くのアドレスを処理できるため、仮想メモリマネージャが心配する必要はありません。
このブログ記事には、プログラミングの仮想メモリに関するいくつかのコメントがあります。http://antirez.com/post/what-is-wrong-with-2006-programming.html
まず、よく使うデータをRAMからHDDに変えてはいけません。そのため、Javaが大量のメモリを割り当てることは問題にならないと言われます。