rav*_*avi 10 java time execution
我想计算我的函数在Java中执行需要多少CPU时间.目前我正在做如下.
long startTime = System.currentTimeMillis();
myfunction();
long endTime = System.currentTimeMillis();
long searchTime = endTime - startTime;
Run Code Online (Sandbox Code Playgroud)
但我发现,对于相同的I/PI,根据系统负载获得不同的时间.
那么,如何获得我的函数执行所需的精确CPU时间.
Joa*_*uer 27
System.currentTimeMillis()只会测量挂钟时间,而不是CPU时间.System.nanoTime()通常会更精确(并且永远不会更糟)currentTimeMillis().ThreadMXBean.getThreadCPUTime()可以帮助您了解给定线程使用了多少CPU时间.使用ManagementFactory.getThreadMXBean()获得ThreadMXBean并Thread.getId()找到id你感兴趣的线程.注意,此方法不需要在每一个JVM的支持!随着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<runs;i++) {
if(i == 0) start = System.nanoTime();
// do test
}
long time = System.nanoTime() - start;
System.out.printf("Each XXXXX took an average of %,d ns%n", time/runs);
Run Code Online (Sandbox Code Playgroud)
非常重要:每种方法只能执行其中一个循环.这是因为它根据使用方式优化了整个方法.如果你有一个像这样的繁忙循环,后面的循环将显得较慢,因为它们没有运行并且将被很好地优化.