gpt4 book ai didi

java - 为什么我的 JVM 会进行一些运行时循环优化并使我的代码出现错误?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:59:22 27 4
gpt4 key购买 nike

考虑以下 java 代码:

public int main() {
int i = 1111;

for (; rules(i) != true && i < Integer.MAX_VALUE; i++) {
//LOG.debug("Testing i: " + i);
}

System.out.println("The mystery number is: " + i);

return i;
}

protected boolean rules(int nb) {
//...
}

我发现,即使 for 循环的继续评估为 true,循环体也会在循环体为空时停止执行。

main 的最终结果是错误的(i 大约 98% 的时间是 16698,有时略高/略低)。

如果我取消注释循环体中的 LOG 语句,循环将继续运行,直到循环继续评估为 false

我使用的 JVM 是 MacOS X VM 1.6.0。

  • 它是否在进行某种运行时优化
  • 这个运行时优化可以被认为是一个错误吗?
  • 或者在 Java 规范的某个地方说,持续评估不应运行功能操作?

ps: 完整的代码源+单元测试可以在这里找到:https://gist.github.com/dirtyhenry/5804130

更新:

  • 我只通过 junit 运行代码。 junit 是否应对此行为负责?

更新 2:

java -version

返回:

java version "1.6.0_51"
Java(TM) SE Runtime Environment (build 1.6.0_51-b11-456-11M4508)
Java HotSpot(TM) 64-Bit Server VM (build 20.51-b01-456, mixed mode)

最佳答案

我在这里遇到了类似的问题:Near empty Java For-Loop acts strange您应该尝试使用 JVM 1.7 或尝试使用 while 循环:

public int main() {
int i = 1111;

while(i < Integer.MAX_VALUE){
if (!rules(i)) {
break;
}
i++
}

System.out.println("The mystery number is: " + i);

return i;
}

关于java - 为什么我的 JVM 会进行一些运行时循环优化并使我的代码出现错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17166047/

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