我试图记录方法完成所需的时间。我最初对整个方法进行了计时,但数字看起来有点偏,所以我决定将每个单独的时间传递给for循环。
奇怪的是,随着循环的进行,入队操作似乎每次都变得越来越快。每次调用q.enqueue()都会将一个递增的字符串(" String1"," String2",....等)排入链表列表。
如果我使num = 100,则每次传递大约需要4,000纳秒。然而,如果我将num增加到100,000,我可以看到前几百次传递再次大约需要4,000次,但是它们会逐渐变得更快更快,最后的一百次是316纳秒或0纳秒。
我知道使用纳米时并不是100%准确,但随着循环的进行,它会变得越来越快。
这里发生了什么?
public static void enqueueLoop(int num, Queue q){
for (int i=0;i<num;i++){
long start, enqueueTime;
start = System.nanoTime();
q.enqueue("String" + (i+1));
qTime = System.nanoTime() - start;
System.out.println("Enqueue Operation took: " + NumberFormat.getInstance().format(qTime) + " nanoseconds");
}
}
答案 0 :(得分:3)
JIT(Just In Time编译器)在看到代码被大量重用并将其编译为本机代码后启动。