【发布时间】:2012-08-25 15:48:12
【问题描述】:
此问题与此相同 Two loop bodies or one (result identical) 但就我而言,我使用 Java。
我有两个循环运行十亿次。
int a = 188, b = 144, aMax = 0, bMax = 0;
for (int i = 0; i < 1000000000; i++) {
int t = a ^ i;
if (t > aMax)
aMax = t;
}
for (int i = 0; i < 1000000000; i++) {
int t = b ^ i;
if (t > bMax)
bMax = t;
}
在我的机器上运行这两个循环大约需要 4 秒。当我将这两个循环融合为一个循环并在该循环中执行所有操作时,它会在 2 秒内运行。如您所见,琐碎的操作构成了循环内容,因此需要恒定的时间。
我的问题是我从哪里获得这种性能改进?
我猜测,在两个单独的循环中,唯一可能影响性能的地方是它增加 i 并检查 i
谢谢!
【问题讨论】:
-
我认为这是因为您正在执行 1B 的增量、1B 的比较和 1B 的跳转...
-
将
int t;声明移到循环外,只在循环内进行赋值t = a ^ i;或t = b ^ i;会有什么影响? -
@barrowc 它不会有任何效果。 JIT 的第一个阶段是将 AST 图转换为单一赋值表示,这将撤消这种别名,以便更好地进行生命周期分析。
-
FWIW,它可以去任何一种方式:Why is one loop so much slower than two loops?
标签: java performance loops