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

Java 注释数量的增加是否会增加执行时间?,java,comments,execution-time,jdk1.5,Java,Comments,Execution Time,Jdk1.5,考虑以下情况: 案例1:(循环的中的注释较少) 执行代码所需的时间为:2.279 案例3:(无注释,循环为空) import java.io.IOException; 公共类秒表{ 私有静态长启动; 公共静态void main(字符串args[])引发IOException{ start=System.currentTimeMillis(); 对于(int i=0;i

考虑以下情况:

案例1:(循环的
中的注释较少

执行代码所需的时间为:2.279

案例3:(无注释,循环为空

import java.io.IOException;
公共类秒表{
私有静态长启动;
公共静态void main(字符串args[])引发IOException{
start=System.currentTimeMillis();
对于(int i=0;i<100000000;i++){
}
System.out.println(“执行代码所用的时间是:”+(System.currentTimeMillis()-start)/1000.0);
}
}
执行代码所需的时间为:2.249

配置:JDK1.5,第三代i5,4GB内存

问题:如果我们添加更多注释,程序执行是否需要更多时间?为什么?

问题:如果我们添加更多注释,程序执行是否需要更多时间?为什么?

不会。评论对执行没有影响

它们会使编译器的速度减慢一点点,但即使是这样,也应该是难以察觉的,除非你有大量的注释

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

不过,您可以验证这些注释并没有什么不同——编译代码,然后运行

javap -c Stopwatch

你可以看看字节码。您将看到不同版本之间没有差异。

否,编译会忽略注释,因此它们不会影响执行时间。你得到的差别很小。如果你尝试测试10次,你会发现你得到的差异在统计错误的范围内


计算机同时执行许多任务。如果您想比较两段执行时间相似的代码的性能,您需要进行许多实验来证明其中一段比另一段快

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

添加注释会增加编译程序所需的时间,但只会增加一分钟。编译时,编译器将必须读取一行代码,以了解是否需要跳过(在注释的情况下)或执行该行代码

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);
    }
}
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);
    }
}
javap -c Stopwatch