2016-06-22 10 views
0

MemoryMXBeanでランタイムメモリ解析に関する興味深い効果があります。 ヒープ内のフリーメモリとNonHeapを決定したいと思います。 だから私のコードは次のようになります。Java MemoryMXBean使用メモリがMaxより大きい

static MemoryMXBean mbean = ManagementFactory.getMemoryMXBean(); 
long fullused = mbean.getHeapMemoryUsage().getUsed() + mbean.getNonHeapMemoryUsage().getUsed(); 
long fullmax = mbean.getHeapMemoryUsage().getMax() + mbean.getNonHeapMemoryUsage().getMax(); 
long fullfree = fullmax - fullused; 

時にはfullFreeための結果が負の値です。 これはどのようにすることができますか?使用されたmemの計算後にガベージコレクションが行われた競合状態ですか?私の記録では、それはかなり頻繁に見られるので、私は競争条件理論を疑う。 ここに他の考えはありますか?

答えて

0

NonHeapのMaxは-1にすることができます。アプリケーションのjconsoleを介して確認できます。 ホットスポットソースでは、メモリ使用の計算はjmm_GetMemoryUsageメソッドで行われます。非ヒープ・メモリ・プールの1つに最大サイズが未定義の場合、非ヒープ全体の最大サイズは-1になります。メタスペースプール(MaxMetaspaceSizeコマンドフラグなし)には未定義の最大サイズがあります

+0

Thanx、私はそれをチェックします。 – magicroomy

関連する問題