2011-12-22 101 views
1

我在想,如果计算方法的执行时间这样是正确的:执行时间计算有多准确?

public class GetExecutionTimes { 

    public static void main(String args[]) { 
    long startTime = System.currentTimeMillis(); 
    GetExecutionTimes ext = new GetExecutionTimes(); 
    ext.callMethod(); 
    long endTime = System.currentTimeMillis(); 
    System.out.println("Total elapsed time in execution of" 
     + " method callMethod() is :" + (endTime - startTime)); 
    } 

    public void callMethod() { 
    System.out.println("Calling method"); 
    for (int i = 1; i <= 10; i++) { 
     System.out.println("Value of counter is " + i); 
    } 
    } 
} 

更具体地说:将时间差,如果我在不同的条件下执行相同的?

如果不能如何使这个计算更准确?

回答

2

Java的几个方面使得编写微型基准测试变得困难。垃圾收集和即时编译是其中的两个。如果尝试一次只callMethod()你应该注册开始时间之前移动的构造函数调用的方法How do I write a correct micro-benchmark in Java?

0

我建议以下是一个非常好的起点。

您还应该使用nanoTime()而不是currentTimeMillis(),因为这封信是容易出错由于本地时钟的变化(例如夏令时调整或有人在机器上简单地改变的时间)。

准确性将取决于您的平台,并不一定在函数名称所示的单位中。