2011-12-22 11 views
1

この方法が正確であるメソッドの実行時間を計算する場合、私は思っていた:実行時間の計算はどのくらい正確ですか?

具体的
public class GetExecutionTimes { 

    public static void main(String args[]) { 
    long startTime = System.currentTimeMillis(); 
    GetExecutionTimes ext = new GetExecutionTimes(); 
    ext.callMethod(); 
    long endTime = System.currentTimeMillis(); 
    System.out.println("Total elapsed time in execution of" 
     + " method callMethod() is :" + (endTime - startTime)); 
    } 

    public void callMethod() { 
    System.out.println("Calling method"); 
    for (int i = 1; i <= 10; i++) { 
     System.out.println("Value of counter is " + i); 
    } 
    } 
} 

:私は別の条件で実行した場合の時間差は同じでしょうか?

これをより正確に計算するにはどうすればよいですか?

答えて

2

マイクロベンチマークの作成が困難なJavaのいくつかの側面があります。ガベージコレクションとジャストインタイムコンパイルは2つあります。あなたが時間にあなたは開始時刻を登録する前に、コンストラクタ呼び出しを移動する必要がありcallMethod()唯一の方法をしようとするとHow do I write a correct micro-benchmark in Java?

0

は、私は非常に良い出発点として、以下のことをお勧めします。

currentTimeMillis()の代わりにnanoTime()を使用する必要があります。これは、ローカル時計の変更(たとえば夏時間の調整やマシンの誰かが時間を変更するなど)によってエラーが発生する可能性があるためです。

精度はプラットフォームによって異なりますが、機能名が示す単位に必ずしも一致するとは限りません。

関連する問題