[英]Java Sigar reporting memory usage that disagrees with Windows Resource Monitor
我已经下载了Java Sigar API( http://support.hyperic.com/display/SIGAR/Home ),并希望使用它来获取有关正在运行的不同进程的内存使用信息。
我编写了以下测试用例来报告eclipse.exe的内存使用情况:
import org.hyperic.sigar.Sigar;
import org.hyperic.sigar.SigarException;
import org.hyperic.sigar.ptql.ProcessFinder;
public class SigarTest {
public static void main(String[] args) throws SigarException {
Sigar sigar = new Sigar();
ProcessFinder find = new ProcessFinder(sigar);
long pid = find.findSingleProcess("Exe.Name.ct=eclipse.exe");
System.out.println(sigar.getProcMem(pid));
}
}
执行此代码输出:
{PageFaults=3017940, Size=4125868032, Resident=608493568}
但是,查看Windows资源监视器,它将显示eclipse.exe的以下统计信息:
Commit (KB): 689,356
Working Set (KB): 594,028
Shareable (KB): 47,332
Private (KB): 546,696
请参见以下屏幕截图:
Sigar报告的4.1GB内存使用量甚至与Resource Monitor报告的任何内存统计数据都不接近。
为什么这么远?
我相信我已经找到了自己问题的答案。 Sigar正在报告虚拟大小(资源监视器中未包含的统计信息)。 有关虚拟大小和提交大小之间差异的说明,可在此处找到: Windows-提交大小与虚拟大小
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.