为什么我的循环方法变得越来越快?

时间:2013-02-09 19:43:15

标签: java queue

我试图记录方法完成所需的时间。我最初对整个方法进行了计时,但数字看起来有点偏,所以我决定将每个单独的时间传递给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");     
    }
}

1 个答案:

答案 0 :(得分:3)

JIT(Just In Time编译器)在看到代码被大量重用并将其编译为本机代码后启动。