Java中的CPU执行时间

我想计算我的函数在Java中执行需要多少CPU时间。 目前我正在做如下。

long startTime = System.currentTimeMillis(); myfunction(); long endTime = System.currentTimeMillis(); long searchTime = endTime - startTime; 

但我发现,对于相同的I / PI,根据系统负载获得不同的时间。

那么,如何获得我的函数执行所需的精确CPU时间。

随着JVM的升温,所用的时间会有所不同。 第二次运行它总是比第一次快。 (第一次必须加载类并调用静态块)在运行方法10,000次之后,它将再次更快(将代码编译为本机机器代码的默认阈值)

为了获得微基准的可重现平均时间,我建议你忽略前10,000次迭代并在此之后运行2-10秒。

例如

 long start = 0; int runs = 10000; // enough to run for 2-10 seconds. for(int i=-10000;i 

非常重要:每种方法只能执行其中一个循环。 这是因为它根据使用方式优化了整个方法。 如果你有一个像这样的繁忙循环,后面的循环将显得较慢,因为它们没有运行并且将被很好地优化。

  1. System.currentTimeMillis()只会测量挂钟时间 ,而不会测量CPU时间。
  2. 如果你需要挂钟时间,那么System.nanoTime()通常比currentTimeMillis()更精确(并且永远不会更糟currentTimeMillis()
  3. ThreadMXBean.getThreadCPUTime()可以帮助您了解给定线程使用了多少CPU时间。 使用ManagementFactory.getThreadMXBean()获取ThreadMXBeanThread.getId()以查找您感兴趣的线程的id 。请注意,每个JVM都不需要支持此方法!

你可以在这里寻找答案:

如何计算方法在Java中的执行时间?

有很多例子来计算方法的执行时间

有许多分析器(Jprofile,Jprobe,Yourkit)可用于分析此类数据。 不仅如此,还有更多……(例如内存利用率,线程详细信息等)