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

Ped*_*dro 1 java memory jvm

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

Runtime rt = Runtime.getRuntime();
long usedMemory = (rt.totalMemory() - rt.freeMemory()) / 1024;
Run Code Online (Sandbox Code Playgroud)

根据任务管理器,当进程消耗3.000.000 K时,此代码将例如计算2.015.203并且一秒后计算1.712.296,实际上内存使用量已经增长.

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

SJu*_*n76 6

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

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

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