2016-03-21 15 views
1

が、私は最近のJavaを学び始め、私はちょっとこれにより困惑していながら、よりループのためである以下のプログラムはloop--はなぜ</p> <p>---速くループ

public class ForLoopExample { 
    public static void main(String[] args) { 
     long startTime = System.nanoTime(); 
     for(int a = 0; a < 10; a++) { 
      System.out.println(a); 
     } 

     long endTime = System.nanoTime(); 
     System.out.println("for loop timing = " + (endTime - startTime) + " ns"); 
     System.out.println("loop completed"); 
    } 
} 

のための速度を決定し、出力タイミングである:ループタイミングの

= 853716のNS

whileループの速度を決定プログラム:

public class WhileLoopExample { 
    public static void main(String[] args) { 
     int a=0; 
     long startTime = System.nanoTime(); 
     while(a < 10) { 
      System.out.println(a); 
      a++; 
     } 
     long endTime = System.nanoTime(); 
     System.out.println("while loop timing = " + (endTime - startTime) + " ns"); 
    } 
} 

ながら以上10とループタイミング= 928358のNS

Why does this happen a detailed explanation would be appreciated. 
+5

違いはありません。より多くのループ反復でテストを再試行してみましょう。 – f1sh

+3

も参照してくださいhttp://stackoverflow.com/questions/504103/how-do-i-write-a-correct-micro-benchmark-in-java –

+0

私は確信していませんが、私はそれが関連していないと思うJVMのバックグラウンドは、 'while'変数' a'を必要とするときだけレジスタにロードすることができます。 'for'ループ変数' a'はループ中に常にレジスタに格納されます。申し訳ありませんが、英語は母国語ではありません。 –

答えて

2

再実行テスト反復だけでなく、それらの反復の反復回数を増やすこともできます。内側のループで10000、結果を平均して平均します。彼らは近くにすべきです。

分散がある理由は、オペレーティングシステムとマルチスレッドの結果です。 OSはあなたのプログラム以外の多くのタスクを管理しており、それらはあなたのプログラムよりもわずかに高い優先順位を取るかもしれません。これにより、実行に視力の遅延が発生します。

サンプルサイズがはるかに大きければ、結果のばらつきが小さくなります。

関連する問題