2012-04-26 8 views
1

私のJavaアプリケーションの現在のメモリ使用量を計算したいと思います。ただし、次のコードを使用しているときは、タスクマネージャに表示される内容と大きく異なります。Java:メモリ使用量を計算すると不正確な結果

Runtime rt = Runtime.getRuntime(); 
long usedMemory = (rt.totalMemory() - rt.freeMemory())/1024; 

タスクマネージャーによれば、このプロセスは3.000.000 Kを消費します。実際にメモリ使用量が増加したときに2.015.203を計算し、1秒後に1.712.296を計算します。

同様の質問によれば、コードはうまくいくはずですが、なぜタスクマネージャーに比べて大きな違いがありますか?

+0

JVisualVMレポートとは何ですか - タスクマネージャとは違いますか? –

+0

あなたはタスクマネージャでどの列を見ていますか?多くのメモリ列があります。 –

+0

なぜ知りたいですか?これは軽度の質問ではありません。 Javaは非常に洗練された管理環境であり、ほとんどすべての状況下で、OSに問い合わせることでプロセス管理の決定を下すべきではありません。 – kittylyst

答えて

6

TaskManagerは、Javaプロセス(JVM)で使用可能なすべてのメモリを指示します。

内部的には、JVMはプログラムの要求に従ってこのメモリを管理します(したがって、JVM内には "空き"メモリがありますが、TaskManに使用されているように見えます)。

また、GCは、最も有用であると判断したときにメモリを解放します。したがって、より多くのオブジェクトを作成した後で、GCが以前に割り当てられた(しかし到達できない)メモリを掃引したため、使用されるメモリは少なくなる可能性が非常に高いです。

関連する問題