2016-06-14 6 views
0

私のプログラムは-Xms10240m -Xmx10240mで実行されます。私はメモリを確認するためにトップを使用して、サイズは3.5グラムです、それはxms valuseよりも小さいです。 use topJavaヒープメモリがTOPより大きい

ただし、jmap -heapを使用すると、ヒープサイズが約10gであることがわかります。 use jmap

何故ですか?

ありがとうございました。

+0

複製可能:http://stackoverflow.com/questions/561245/virtual-memory-usage-from-java-under-linux-too-much-memory-used – waltersu

答えて

0
  1. -Xmsオプションは
  2. トップは実メモリを示しJVM分、ヒープサイズの定義に使用されます(VIRT/RES/SHR)プロセスでは、あなたの例-Xms10g -Xmx10g、JVMの開始を使用し

を使用しましたそれはヒープのために使用されるメモリを10gのオペレーティングシステムに要求します。 とOP-システムは、JVM(VIRTなどのショー)のためのメモリを割り当てようとしますが、システムはuと約束していなかった、それは物理メモリを割り当てます、それは多分交換;)

をしかし、uがVIRTはまだあるでしょう10gでない理由は10gですヒープの場合サイズのJVMには、スタック、permgen(ホットスポットJDK8、openJDKにはpermgenがないようですが、私が間違っていると私を修正します)、ネイティブスタック、コードファイルなど

そしてRESは実際の物理メモリのためのものですを使用して、それはまだヒープだけでなく、新しいオブジェクト、メソッドなどを含んでいます。

+0

あなたの情報をありがとう、それは正しい永続的な世代はJDK8のHotSpotで削除されました。 –

+0

うん、jdk8 +削除permgen – Five

関連する問題