我有一个无法解释的问题。 main函数中的代码如下:
String numberStr = "3151312423412354315";
System.out.println(numberStr + "\n");
System.out.println("Lehman method: ");
long beginTime = System.currentTimeMillis();
System.out.println(Lehman.getFullFactorization(numberStr));
long finishTime = System.currentTimeMillis();
System.out.println((finishTime-beginTime)/1000. + " sec.");
System.out.println();
System.out.println("Lehman method: ");
beginTime = System.currentTimeMillis();
System.out.println(Lehman.getFullFactorization(numberStr));
finishTime = System.currentTimeMillis();
System.out.println((finishTime-beginTime)/1000. + " sec.");
如果有必要:方法Lehman.getFullFactorization(...)
以字符串格式返回质除数的ArrayList
。
这是输出:
3151312423412354315
Lehman method:
[5, 67, 24473, 384378815693]
0.149 sec.
Lehman method:
[5, 67, 24473, 384378815693]
0.016 sec.
我看到的时候很惊讶。为什么相同方法的第二次执行比第一次执行快得多?首先,我认为在第一次运行该方法时,它会用运行 JVM 及其资源的时间来计算时间,但这是不可能的,因为显然 JVM 在执行“main”方法之前启动。
最佳答案
在某些情况下,Java 的 JIT 编译器(请参阅 http://java.sun.com/developer/onlineTraining/Programming/JDCBook/perf2.html#jit )会在方法的第一次执行时启动并执行该方法代码的优化。这应该会使所有后续执行更快。我认为这可能就是您的情况。
关于java - Java 中方法的实际执行时间是多少?它取决于什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9325852/