执行时间和处理时间波动

时间:2012-06-15 10:41:21

标签: java profiling cpu profiler cpu-usage

为什么执行和进程出现波动每次在Netbeans中运行以下代码时CPU时间都会有所不同。我的CPU使用率是否每次都有所不同。我如何找到以下代码的CPU使用情况。

class test{
static com.sun.management.OperatingSystemMXBean mxbean = (com.sun.management.OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean();

public static void main(String[] args) throws InterruptedException {


        long start1 = System.currentTimeMillis();
        long pstart1 = mxbean.getProcessCpuTime();
        long pstart2 = TimeUnit.MILLISECONDS.convert(pstart1, TimeUnit.NANOSECONDS);        

    for (int i = 0; i < 10000; i++) {    

            System.out.println("hello");

    }     

        long end1 = System.currentTimeMillis();
        long pend1 = mxbean.getProcessCpuTime();
        long pend2 = TimeUnit.MILLISECONDS.convert(pend1, TimeUnit.NANOSECONDS);
        float pdif = pend2 - pstart2;
        float edif = end1 - start1;

        System.out.println(edif);
        System.out.println(pdif);

}
}

1 个答案:

答案 0 :(得分:1)

您主要执行IO,因此您非常依赖于操作系统的行为。

毫秒秒不是很准确,分辨率可能超过1毫秒。例如currentTimeMillis在Windows XP上的分辨率约为15毫秒。在许多unix系统上使用的CPU时间分辨率为10 ms。

如果您使任务CPU绑定而不是IO绑定并运行它更长时间,您应该看到更一致的计时。