2013-02-09 86 views
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");  
    } 
} 

回答

3

的JIT(即時編譯器)踢在看到該代碼被重用了很多後,並將其編譯爲本地代碼。