为什么每次我在 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);
}
}
最佳答案
您主要执行 IO,因此您非常依赖操作系统的行为。
毫秒不是很准确,分辨率可能超过 1 毫秒。例如currentTimeMillis 在 Windows XP 上的分辨率约为 15 毫秒。在许多 UNIX 系统上,所使用的 CPU 时间的分辨率为 10 毫秒。
如果您使任务受 CPU 限制而不是 IO 限制并运行更长时间,您应该会看到更一致的计时。
关于java - 执行时间和处理时间波动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11049146/