1

我正在尝试记录方法完成所需的时间。我最初是为整个方法计时,但数字似乎有点不对劲,所以我决定为每个人通过 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");     
    }
}
4

1 回答 1

3

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

于 2013-02-09T19:45:18.893 回答