内存分析器和任务管理器之间分配的内存差异

Allocated memory discrepancy between Memory Analyzer and Task Manager

我想分析一个相当大的 Java VM 进程的内存使用情况。

我在启动 Eclipse 内存分析工具时意识到的一件事是所谓的分配内存之间的巨大差异:Windows任务管理器/CMD 任务列表显示大约 5.5GB,而内存分析器仅显示 1, 1GB。是什么造成了这种差异?

Eclipse Memory Analyzer (MAT) 看到和报告的是 Java 的大小,即由 [=10= 组成的对象图] 实例。操作系统看到和报告的是 RAM 中的区域大小,JVM 从 OS 请求存储 Java 堆(及其内部数据structures) in. 这个内存通常不会被 live Java objects 完全填满;一些对象可能已经 dead(并且未被视为 MAT)但尚未被收集,并且垃圾收集器本身也需要一些 space 来移动对象。

我希望这解释了基础知识(关于 JVM 和 OS 内存管理的更多细节)。