【问题标题】:Allocated memory discrepancy between Memory Analyzer and Task Manager内存分析器和任务管理器之间分配的内存差异
【发布时间】:2017-02-10 12:53:31
【问题描述】:
我想分析一个非常庞大的 Java VM 进程的内存使用情况。
在启动 Eclipse 内存分析工具时,我意识到所谓的分配内存之间存在巨大差异:Windows 任务管理器/CMD 任务列表显示大约 5.5GB,而内存分析器仅显示 1.1GB。是什么导致了这种差异?
【问题讨论】:
标签:
eclipse
eclipse-plugin
heap-memory
eclipse-memory-analyzer
memoryanalyzer
【解决方案1】:
Eclipse Memory Analyzer (MAT) 看到和报告的是 Java 堆 的大小,即由 Object 实例组成的对象图。操作系统看到并报告的是 RAM 中 JVM 向操作系统请求存储 Java 堆(及其内部数据结构)的区域大小。该内存通常不会被完全填满使用 live Java 对象;一些对象可能已经死(并且看不到是 MAT)但尚未被收集,垃圾收集器本身也需要一些空间来移动对象。
我希望这能解释基础(关于 JVM 和 OS 内存管理的更多细节)。