1

Javaアプリケーションの現在のメモリ使用量を計算したいと思います。ただし、次のコードを使用している場合、タスクマネージャーに表示されるものとはかなりの違いがあります。

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

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

同様の質問によると、コードは問題ないはずですが、タスクマネージャーと比べてなぜこれほど大きな違いがあるのでしょうか。

4

1 に答える 1

6

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

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

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

于 2012-04-26T23:49:13.700 に答える