Java Sigar报告不同于Windows资源监视器的内存使用情况

时间:2016-08-16 15:01:36

标签: java sigar

我已经下载了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

请参阅以下屏幕截图:

enter image description here

Sigar报告的4.1GB内存使用量甚至不接近资源监视器报告的任何内存统计数据。

为什么这些目前为止?

1 个答案:

答案 0 :(得分:0)

我相信我找到了自己问题的答案。 Sigar报告虚拟大小(资源监视器中未包含的统计信息)。可以在此处找到虚拟大小和提交大小之间差异的说明:Windows - Commit Size vs Virtual Size