为什么我的循环方法变得越来越快?
问题描述:
我试图记录一个方法完成所需的时间。我原本是对整个方法进行计时,但数字看起来有点偏离,所以我决定每次单独通过for循环。为什么我的循环方法变得越来越快?
奇怪的是,随着循环的进行,入队操作似乎每次都会变得更快更快。 q.enqueue()的每个调用都将增加的字符串(“String1”,“String2”,....等)排入链表队列。
如果我让num = 100,每个过程大约需要4,000纳秒。但是如果我将num数增加到100,000,我可以看到前几百次再次使用大约4,000次,但是它们逐渐变得更快更快,最后一百次或者是316纳秒或者是0纳秒。
我知道使用nanotime不会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");
}
}
答
的JIT(即时编译器)踢在看到该代码被重用了很多后,并将其编译为本地代码。