为什么执行和进程出现波动每次在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);
}
}
答案 0 :(得分:1)
您主要执行IO,因此您非常依赖于操作系统的行为。
毫秒秒不是很准确,分辨率可能超过1毫秒。例如currentTimeMillis在Windows XP上的分辨率约为15毫秒。在许多unix系统上使用的CPU时间分辨率为10 ms。
如果您使任务CPU绑定而不是IO绑定并运行它更长时间,您应该看到更一致的计时。