【发布时间】:2014-03-06 01:31:51
【问题描述】:
我只是在 java 中编写了一个程序来测试执行 myQsort 所花费的时间。
部分代码如下所示:
long t1 = System.currentTimeMillis();
new sort().myQsort(a, 0, 100000 - 1);
long t2 = System.currentTimeMillis();
我将语句循环五次以获得五次 timeSpent (t2-t1) 并将它们打印出来,但结果很奇怪,每次第一次 timeSpent 都比其他时间大
Java 中的快速排序:
第一轮:30毫秒
第二轮:9毫秒
第三轮:9毫秒
第四轮:11毫秒
第 5 轮:9 毫秒
平均花费时间:13 毫秒
我尝试以不同的顺序读取 5 个输入文件,甚至读取同一个文件 5 次。但结果都是相似的。我还尝试在另一台计算机上运行代码,但结果仍然相同。
谁能解释为什么会这样?
问题已解决
感谢所有答案,我尝试将 -Xint 添加到 VM 设置中(以关闭 JIT),这次一切正常。
Java 中的快速排序:
第一轮:61毫秒
第二轮:68毫秒
第三轮:72毫秒
第四轮:73毫秒
第 5 轮:59 毫秒
平均花费时间:66 毫秒
再次感谢您的所有回答,这对您有很大帮助:)
【问题讨论】:
-
我认为主要原因是 Java JIT 编译器
-
垃圾收集、JIT、系统/操作系统开销...
-
第一次运行,这是冷启动,意味着Java第一次加载到代码中。第二次它已经在内存中了。如您所见,第一次之后时间变化不大。