2013-04-15 57 views
2

如何測量運行Java程序的時間成本?如何估算我的程序的時間成本。 (該程序在Eclipse中運行)如何測量時間成本?

代碼:

import java.util.Scanner; 

public class S1_4 { 

public static void main(String[] args) { 
    int i,j,k=1; 
    int[] table = new int[1000001]; 
    for(i = 2;i<1000000;i++) 
    { 
     if(table[i]==0) 
     { 
     for(j=1;i*j<999999;j++) 
      table[i*j]=k; 
      k++; 
     } 
    } 

    int a; 
    Scanner cin = new Scanner(System.in); 

    while(cin.hasNext()) { 
     a = cin.nextInt();   
     System.out.println(table[a]); 
    } 
    cin.close(); 
} 

} 
+1

你見過:http://stackoverflow.com/questions/504103/how-do-i-write-a-correct-micro-benchmark-in-java? – harpun

+0

實際上,如果您不想更改現有代碼,實際上有一個AOP(aspectj,例如)方法。 –

回答

5

代替System.currentTimeMillis的()使用System.nanoTime(),因爲的currentTimeMillis()取決於系統時鐘,但nanoTime()返回reletive時間,不取決於系統時鐘。

如果您的系統時鐘在currentTimeMillis()的兩次調用之間改變,那麼時間間隔是沒有意義的。

long start = System.nanoTime(); 
    //time consuming code here. 
    //... 
    long end = System.nanoTime(); 
    long used = end-start; 
    System.out.println("used:"+TimeUnit.NANOSECONDS.toMillis(used)+" ms"); 

詳見here

1
public static void main(String[] args) { 
    long startTime = System.currentTimeMillis(); 
    ... 
    System.out.println("Time taken-"+(System.currentTimeMillis() -startTime)); 
} 
0

如果方法花費的時間很少,測量運行方法所需的時間就會更加困難。納米計數器不夠穩定。我建議大量運行該方法並測量組合運行時間。這也將允許JIT編譯器對其進行優化,以便您知道在運行時需要多少時間。

您可以使用jmeter或其他性能測試框架,或者您可以編寫自己的循環多次執行代碼。另外兩個答案爲您提供瞭如何衡量代碼所需時間的良好指針。我建議你測量大量運行時間(例如10k)而不是一次運行。