我想分析一个非常庞大的Java VM进程的内存使用情况。
我在启动Eclipse内存分析工具时意识到的一件事是所谓的分配内存之间的巨大差异:Windows任务管理器/ CMD任务列表显示大约5,5GB,而内存分析器只显示1,1GB。导致这种差异的原因是什么?
答案 0 :(得分:1)
Eclipse Memory Analyzer (MAT)看到和报告的内容是Java 堆的大小,即由Object
个实例组成的对象图。操作系统看到和报告的内容是JVM从操作系统请求存储Java堆(及其内部数据结构)的 RAM 区域的大小。此内存通常未完全填充使用 live Java对象;一些对象可能已经死(并且看不到MAT)但尚未收集,垃圾收集器本身也需要一些空间来移动对象。
我希望这能解释基础知识(JVM和OS内存管理的详细信息还有很多)。