6

次のケースを考慮してください。

ケース 1: ( のコメントが少ないfor loop)

import java.io.IOException;

public class Stopwatch { 
    private static long start;
    public static void main(String args[]) throws IOException {
        start = System.currentTimeMillis();
        for (int i = 0; i < 1000000000; i++) {
            /**
             * Comment Line 1
             * Comment Line 2
             * Comment Line 3
             * Comment Line 4
             */
        }
        System.out.println("The time taken to execute the code is: " + (System.currentTimeMillis() - start)/1000.0);
    }
}

コードの実行にかかった時間: 2.259

ケース 2: (その他のコメントはfor loop)

import java.io.IOException;

public class Stopwatch { 
    private static long start;
    public static void main(String args[]) throws IOException {
        start = System.currentTimeMillis();
        for (int i = 0; i < 1000000000; i++) {
            /**
             * Comment Line 1
             * Comment Line 2
             * Comment Line 3
             * Comment Line 4
             * Comment Line 5
             * Comment Line 6
             * Comment Line 7
             * Comment Line 8
             */
        }
        System.out.println("The time taken to execute the code is: " + (System.currentTimeMillis() - start)/1000.0);
    }
}

コードの実行にかかった時間: 2.279

ケース 3: (コメントなし、空for loop)

import java.io.IOException;

public class Stopwatch { 
    private static long start;
    public static void main(String args[]) throws IOException {
        start = System.currentTimeMillis();
        for (int i = 0; i < 1000000000; i++) {

        }
        System.out.println("The time taken to execute the code is: " + (System.currentTimeMillis() - start)/1000.0);
    }
}

コードの実行にかかった時間: 2.249

構成: JDK 1.5、第 3 世代 i5、4GB RAM。

質問: コメントを追加すると、プログラムの実行に時間がかかりますか? なんで?

4

4 に答える 4

15

質問: コメントを追加すると、プログラムの実行に時間がかかりますか? なんで?

いいえ。コメントは実行には影響しません。

それらはコンパイラの速度を少し低下させますが、それでさえ、ばかげた数のコメントがない限り、感知できないはずです。

あなたが気づいている「効果」は、物事のタイミングを計る方法に関係しています.System.currentTimeMillisベンチマークに使用するのは悪い考えです. 通常はより高精度のクロックを使用するため、代わりに使用する必要がありますSystem.nanos(「壁時計」の時間を決定するのではなく、タイミングにのみ適しています)。さらに、通常、ベンチマーク プログラムは、実際に測定する前に、JIT コンパイラなどをウォームアップするのに十分な時間「ターゲット」コードを実行する必要があります。次に、システムで同時に実行されていた可能性のある他のことを考慮する必要があります。基本的に、優れたベンチマークを作成するには多くの作業が必要です。今後重要なベンチマークを作成する場合は、 Caliperを検討することをお勧めします。

ただし、コメントだけで違いがないことを確認できます-コードをコンパイルしてから実行します

javap -c Stopwatch

バイトコードを見ることができます。異なるバージョン間で違いがないことがわかります。

于 2013-09-16T05:54:21.740 に答える
2

いいえ、コメントはコンパイルによって無視されるため、実行時間には影響しません。得られる差は非常に小さいです。テストを 10 回試行すると、得られる差が統計上の誤りの範囲内にあることがわかります。

コンピュータは多くのタスクを同時に実行します。同様の実行時間を与える 2 つのコードのパフォーマンスを比較したい場合、一方が他方よりも高速であることを証明するために多くの実験が必要です。

于 2013-09-16T05:57:44.963 に答える