我想知道以这种方式计算方法的执行时间是否准确:
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);
}
}
}
更具体地说:如果我在不同条件下执行,时间差是否相同?
如果不能,我怎样才能使这个计算更准确?
答案 0 :(得分:2)
Java的几个方面使得编写微基准测试变得困难。垃圾收集和即时编译是其中两个。
我建议以下是一个非常好的起点:How do I write a correct micro-benchmark in Java?
答案 1 :(得分:0)
如果您尝试仅对方法callMethod()
计时,则应在注册开始时间之前移动构造函数调用。
您还应该使用nanoTime()
而不是currentTimeMillis()
,因为本地时钟的更改(例如夏令时调整或机器上的某个人只是改变时间)会导致错误。< / p>
准确性取决于您的平台,不一定是函数名称所暗示的单位。