java - 执行时间和处理时间波动

标签 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);

}
}

最佳答案

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

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

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

关于java - 执行时间和处理时间波动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11049146/

相关文章:

java - JFrame 或 Jpanel 中的 repaint() 方法?

java - 使用 tomcat 和 Junit 进行单元测试 Jersey 服务

java - 使用类更新 HashMap 中的 HashMap

django - gae_mini_profiler {% profiler_includes %} 给出无效 block 标记 : 'profiler_includes'

windows - 无法对在 Windows7 上作为服务运行的 Tomcat7 使用 JVisualVM 分析

hadoop - Hadoop Oozie CPU利用率高

c - 是什么让线程和进程独一无二?

java - 检查字符串是android代码中的URL吗?

java - 使用 Java Visual VM 进行分析时,CPU/内存选项卡不显示

cpu - XMM 寄存器总数或每个内核