1

为什么每次我在 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);

}
}
4

1 回答 1

1

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

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

如果您使任务受 CPU 限制而不是 IO 限制并运行更长时间,您应该会看到更一致的时序。

于 2012-06-15T10:57:28.210 回答