我只是在 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毫秒
再次感谢您的所有答案,它有很多帮助:)
答案 0 :(得分:4)
第一次运行它时,这是一个冷启动,这意味着Java首次加载程序代码和自己的代码。
第二次它已经在记忆中了。如你所见,第一次之后时间变化不大。
此外,毫秒可能因发生的事件而异。例如,有些东西是通过网络发送给你的,你的操作系统需要修改一个重要的表格等等。
答案 1 :(得分:0)
除了JIT编译之外,另一个因素可能是您要排序的列表的状态。 就像Quicksort在列表已经排序时表现最差一样,如果列表已经排序,排序算法可能表现最佳。
因此,您可能希望确保排序算法不会更改列表的状态,或者在开始测试之前需要复制列表。