質問: ### 知りたいこと linuxでfreeコマンドを実行すると下記のように表示されると思いますが、 linuxで1GBのヒープ領域を取るjavaプログラムを実行しても メモリの使用量(-/+ buffers/cache:のused)が1GB増えないのは何故でしょうか。 実際に試したところメモリの使用量は0.08GB程度しか増えていません。 (計算:1216212-1130764=85,448(KB)) ``` free total used free shared buffers cached Mem: 8062812 7593700 469112 0 239296 6223640 -/+ buffers/cache: 1130764 6932048 Swap: 4128760 21284 4107476 ▼1GBのヒープをとるjavaプログラム実行後 free total used free shared buffers cached Mem: 8062812 7679112 383700 0 239296 6223604 -/+ buffers/cache: 1216212 6846600 Swap: 4128760 21284 4107476 ``` ### 試したこと javaヒープ内のメモリ使用状況はみる必要はないかと思いますが、 念のためjavaヒープをどれくらい使用しているか確認した結果は以下の通りです。 javaヒープの使;用量を確認すると 計算:S0U+S1U+EU+OU+PU 167838.5+148.3+22026.6=190,013.4(KB)=0.18(GB) (javaプログラム実行前後のfreeコマンドで確認した0.08GBよりも多いです) ``` S0C S1C S0U S1U EC EU OC OU PC PU YGC YGCT FGC FGCT GCT 52416.0 52416.0 0.0 0.0 419456.0 167838.5 524288.0 148.3 32768.0 22026.6 0 0.000 1 0.006 0.006 ``` ### 補足情報(言語/FW/ツール等のバージョンなど) ``` uname -a Linux COLTVSVMSRP21 2.6.32-431.el6.x86_64 #1 SMP Fri Nov 22 03:15:09 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux ```
回答: 「1GBのヒープを取った」というのは論理メモリの話です。freeで表示されるのは物理メモリの話です。 なので、直接にはリンクしません。 OSに対してJavaVMが使用論理メモリを増やしたとしても、そのメモリにアクセスに行かないと物理メモリは割り当てられません。 「その1GBのメモリを先頭から末尾までひたすら書き込み続け、それを繰り返す」ようなプログラムであれば、物理メモリ使用量も1GB近く増えると思います。