gpt4 book ai didi

java - 有和没有空体的 For 循环需要相同的时间

转载 作者:行者123 更新时间:2023-12-04 08:52:47 27 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





How do I write a correct micro-benchmark in Java?

(11 个回答)


11 个月前关闭。




我注意到以下两个循环花费的时间相同:~ 1.2 秒。

double count = Math.pow(10, 9);
for (int i = 0; i < count; i++) {
int y = 10;
int x = 3*y;
x = 100*y;
int[] arr = new int[3];
arr[0] = 1;
}
double count = Math.pow(10, 9);
for (int i = 0; i < count; i++) {
//nothing
}
为什么他们会在同一时间完成?这些 for 循环只会递增并进行 1 次比较,因此每次迭代有 2 个 Action 。我认为第一个需要大约 3 倍的时间才能完成,因为它执行 7 个 Action ,而第二个执行 2 个 Action 。

最佳答案

答案不是因为优化(或仅因为优化 - 生成字节码)。这是因为循环是一个浮点循环,浮点运算是出了名的昂贵。因此,内部代码相对于整体运行时间而言相对更快或无关紧要(正如@j11john 所暗示的那样)。
如果你改变循环所以它是 int基于,这两种形式将以明显不同的速度运行。

        long start = System.nanoTime();
int count = (int)Math.pow(10, 9);
int x = 0;
for(int i = 0;i<count;i++) {
int y = 10;
x = 3*y;
x = 100*y*x;
int[] arr = new int[3];
arr[0] = 1;

}
System.out.println((System.nanoTime()-start)/1_000_000_000.);
}
8.4248E-5 vs 0.047076639后一次使用额外的代码。
因此,两个运行时间的相似性(如 OP 所观察到的)与循环的性质(int vs double)有关,与循环内的代码几乎没有关系。

关于java - 有和没有空体的 For 循环需要相同的时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64018008/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com