这里是一个示例代码:
public class TestIO{
public static void main(String[] str){
TestIO t = new TestIO();
t.fOne();
t.fTwo();
t.fOne();
t.fTwo();
}
public void fOne(){
long t1, t2;
t1 = System.nanoTime();
int i = 10;
int j = 10;
int k = j*i;
System.out.println(k);
t2 = System.nanoTime();
System.out.println("Time taken by 'fOne' ... " + (t2-t1));
}
public void fTwo(){
long t1, t2;
t1 = System.nanoTime();
int i = 10;
int j = 10;
int k = j*i;
System.out.println(k);
t2 = System.nanoTime();
System.out.println("Time taken by 'fTwo' ... " + (t2-t1));
}
}
这给出了以下输出: 100 “fOne”所花费的时间... 390273 100 “fTwo”所花费的时间... 118451 100 “fOne”所花费的时间... 53359 100 “fTwo”所花费的时间... 115936 按任意键继续 。 。 .
为什么第一次执行相同的方法比连续调用花费更多的时间(明显更多)?
我尝试向命令行提供-XX:CompileThreshold=1000000
,但没有任何区别。
最佳答案
有几个原因。 JIT(Just In Time)编译器可能尚未运行。 JVM 可以针对不同的调用进行不同的优化。您正在测量耗时,因此您的计算机上可能正在运行 Java 之外的其他程序。处理器和 RAM 缓存在后续调用中可能是“热”的。
您确实需要进行多次调用(数千次)才能获得准确的每个方法执行时间。
关于java - 为什么连续两次调用同一方法会产生不同的执行时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/804620/