执行时间计算有多准确?

时间:2011-12-22 17:36:08

标签: java jvm

我想知道以这种方式计算方法的执行时间是否准确:

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 个答案:

答案 0 :(得分:2)

Java的几个方面使得编写微基准测试变得困难。垃圾收集和即时编译是其中两个。

我建议以下是一个非常好的起点:How do I write a correct micro-benchmark in Java?

答案 1 :(得分:0)

如果您尝试仅对方法callMethod()计时,则应在注册开始时间之前移动构造函数调用。

您还应该使用nanoTime()而不是currentTimeMillis(),因为本地时钟的更改(例如夏令时调整或机器上的某个人只是改变时间)会导致错误。< / p>

准确性取决于您的平台,不一定是函数名称所暗示的单位。