Java中相同语句的运行时间差别很大

时间:2014-03-06 01:31:52

标签: java time

我只是在 java 中编写一个程序来测试执行myQsort所花费的时间。
部分代码如下:

long t1 = System.currentTimeMillis();
new sort().myQsort(a, 0, 100000 - 1);
long t2 = System.currentTimeMillis();


我循环语句五次以获得五次timeSpent(t2-t1)并将其打印出来,但结果很奇怪,每次第一次出现时歌曲比其余时间更大


Java快速排序:
第1轮:30ms
第二轮:9ms
第3轮:9ms
第4轮:11毫秒
第5轮:9ms
平均花费的时间:13毫秒


我尝试过以不同的顺序读取5个输入文件,甚至尝试读取同一个文件5次。但结果都很相似。我也尝试在不同的计算机上运行代码,但结果仍然相同。

谁能解释为什么会这样?


解决了问题 感谢所有的答案,我尝试将-Xint添加到VM设置(为了关闭JIT),这次每次都很好。


Java快速排序:
第1轮:61ms
第二轮:68毫秒
第3轮:72毫秒
第4轮:73毫秒
第5轮:59ms
平均花费的时间:66毫秒


再次感谢您的所有答案,它有很多帮助:)

2 个答案:

答案 0 :(得分:4)

第一次运行它时,这是一个冷启动,这意味着Java首次加载程序代码和自己的代码。

第二次它已经在记忆中了。如你所见,第一次之后时间变化不大。

此外,毫秒可能因发生的事件而异。例如,有些东西是通过网络发送给你的,你的操作系统需要修改一个重要的表格等等。

答案 1 :(得分:0)

除了JIT编译之外,另一个因素可能是您要排序的列表的状态。 就像Quicksort在列表已经排序时表现最差一样,如果列表已经排序,排序算法可能表现最佳。

因此,您可能希望确保排序算法不会更改列表的状态,或者在开始测试之前需要复制列表。