2012-08-24 9 views
8

私の質問は、タイトルの通りです、と私は検索していくつかの知識を得ました:JVMが-Xmsよりも少ないメモリを消費するのはなぜですか?

  1. Linuxが共有しているメモリ How to measure actual memory usage of an application or process?

  2. JVMはWhat does the -Xms JVM mean in reference to heap memory?

  3. のXms にsettedメモリの量を確保します

まだ、なぜ、いくつかの助けを提供することができますかわからないのですか?

ここで私のテストはUbuntu12.04(64ビット)で実行されます。 JDK 1.7.0_04。そしてトップは、以下を示しています。あなたは常駐メモリを見ている

PID USER  PR NI VIRT RES  SHR S %CPU %MEM TIME+ COMMAND 
4067 brian  20 0 5316m **262m** 7496 S 0 3.3 0:00.30 java -**Xms4096m** -Xmx4096m Test 
4066 brian  20 0 3182m **256m** 7496 S 0 3.3 0:00.30 java -**Xms2048m** -Xmx2048m Test 
4065 brian  20 0 2114m **252m** 7492 S 0 3.2 0:00.30 java -**Xms1024m** -Xmx1024m Test 
4064 brian  20 0 1314m **76m** 7584 S 0 1.0 0:00.20 java -**Xms256m** -Xmx256m Test 
4063 brian  20 0 1180m **51m** 7608 S 0 0.7 0:00.21 java -**Xms128m** -Xmx128m Test 

答えて

5

- つまり、物理RAMを消費します。詳細はhereを参照してください。

仮想メモリは、(ディスクに)スワップアウトされたメモリを含め、アプリケーションで消費されるメモリです。仮想メモリと-Xmsの設定とのより密接な関連性があることがわかります。

詳細はthis ServerFault answerを参照してください。

+0

「私の記憶が豊富であっても、なぜスワップを使うのか」と尋ねるところです。あなたが添付したURLから答えを得ました...ありがとう! –

+0

いつRESメモリがいつxmsになりますか? xmsとxmx = 6gの進捗状況があり、ブートストラップ後、RESは4g、一日後は5.9gですが、ヒープをダンプすると3.9gしかありません。それで、jvmは、メモリ内の使用されているオブジェクトがそれほど必要ではないにもかかわらず、xmsまでメモリを消費し続けますか? – Jaskey

3

JVMの起動時に、起動時に最大ヒープサイズを仮想メモリの1つの連続ブロックとして予約します。ただし、実際に使用されているページのみが常駐ページ(実際のメインメモリ)になります。

最小サイズを設定すると、必要がない場合でもJVMがそのメモリを使用することはありません。代わりに、これまでのところメモリを減らすための努力はほとんどかかりません(ほとんどの場合、いくつかのマイナーコレクションが表示されることがあります)。ほとんどのアプリケーションでは、最小サイズにほぼ達するが、 "hello world"プログラムは、最小サイズを指定します。

+0

xms = xmx = 6gと設定すると、到達可能なオブジェクトが4gしかなくても、ほとんどの場合gcがトリガーされません。 – Jaskey

関連する問題