java - Java 中方法的实际执行时间是多少?它取决于什么?

标签 java timing

我有一个无法解释的问题。 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/

相关文章:

java - 连接android到wamp服务器,出现空指针异常

java - Hibernate 向用户添加一本书

java - Tomcat 9 上的 SSL Windows 认证错误

linux - 如何从 Linux 中的用户空间获得毫秒级精度的正常运行时间?

java - Hibernate - 使用mappedBy时外键为空

java - 在 Eclipse 中进入 Java EE 代码

makefile - 如何定时执行 gnu make 规则?

python - Python time.perf_counter() 返回的小数秒到底是多少?

algorithm - 在快速排序中,如果一个数组是随机的,使用 3 的中位数来选择主元是否重要?

android - 为什么在以下情况下不调用 "onPause"?