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

标签 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,实际上内存使用量已经增加。

按照类似的问题,代码应该没问题,但是为什么和任务管理器相比会有这么大的差异?

最佳答案

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

在内部,JVM 根据程序需要管理此内存(因此,JVM 内部有“空闲”内存,但对 TaskMan 来说似乎已使用)。

此外,GC 会在它认为内存最有用时释放内存。因此,很可能在创建更多对象后,使用的内存更少,因为 GC 已经清除了之前分配(但无法访问)的内存。

关于Java:计算内存使用量时结果不准确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10342940/

相关文章:

java - Tomcat session 的 Java 类是什么?

java - 一些线程卡在 semaphore.aquire() (threads/semaphore/countdownlatch)

java - 如何制作带有打印语句的纸牌游戏,仅允许每张纸牌使用特定次数?

java - GAE/J 数据存储 : how to build an IN query with JDO

Java:声明和初始化的最佳实践

c++ - 调用 delete[] 会破坏我的 C++ 程序

java - 二叉搜索树递归不起作用

linux - kdump 磁盘大小的最佳做法是什么

java - 从 JVM 崩溃日志中的堆栈跟踪获取行号

java - 打印GCApplicationStoppedTime