注释数量的增加是否会增加执行时间?

时间:2013-09-16 05:53:27

标签: java comments execution-time jdk1.5

考虑以下情况:

案例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 个答案:

答案 0 :(得分:15)

  

问题:如果我们添加更多评论,该程序是否需要更多时间来执行?为什么呢?

没有。评论在执行时有 no 效果。

他们会将编译器放慢一个 tiny 位 - 但即使这样也应该是不可察觉的,除非你有荒谬的数量的评论。

你注意到的“效果”更多地与你计时的方式有关 - 使用System.currentTimeMillis进行基准测试是一个坏主意;您应该使用System.nanos,因为它通常使用更高精度的时钟(仅适用于计时,而不适用于确定“挂钟”时间)。此外,通常基准程序应该运行其“目标”代码足够长的时间,以便在实际测量之前预热JIT编译器等。然后,您需要考虑可能同时在系统上运行的其他内容。基本上,编写一个好的基准测试涉及很多。如果您将来要编写任何重要的基准测试,我建议您查看Caliper

您可以通过注释验证没有区别 - 编译代码然后运行

javap -c Stopwatch

你可以看一下字节码。你会发现不同版本之间没有区别。

答案 1 :(得分:2)

不,编译会忽略注释,因此它们不会影响时间执行。你得到的差异非常小。如果您尝试10次测试,您会发现您获得的差异在于统计错误。

计算机同时完成很多任务。如果你想比较两段给出相似执行时间的代码的性能,你需要进行很多实验来证明其中一段比其他更快。

答案 2 :(得分:2)

它可能会在非常微小的级别上降低编译过程 - 它所做的只是阅读///* */并在此之后跳过所有内容,直到换行符或结束注释。如果要获得更准确的结果,请每次运行10次,并获得每次迭代的平均执行时间。然后,比较。

答案 3 :(得分:0)

添加注释会增加编译程序所花费的时间,但只会增加一分钟。编译时,编译器必须读取一行代码才能知道它是否需要跳过(在有注释的情况下)或执行该行代码。