Java:计算内存使用时的结果不准确

时间:2012-04-26 23:43:59

标签: java memory jvm

我想计算我的java应用程序的当前内存使用情况。但是,当我使用以下代码时,任务管理器中显示的内容会有很大差异。

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

根据任务管理器,该过程消耗3.000.000 K时,此代码将例如计算2.015.203和一秒后1.712.296,实际上内存使用量增长了。

根据类似的问题,代码应该没问题,但为什么与任务管理器相比存在如此巨大的差异?

1 个答案:

答案 0 :(得分:6)

TaskManager会告诉您java进程(JVM)的所有可用内存。

在内部,JVM根据程序的要求管理这个内存(因此,JVM中有“免费”内存,但它看起来与TaskMan一样)。

此外,GC在确定最有用时释放内存。因此,很有可能在创建更多对象之后,使用的内存更少,因为GC已扫描先前分配的(但无法访问的)内存。