gpt4 book ai didi

java - 在 Java 中编译循环

转载 作者:行者123 更新时间:2023-11-30 06:25:13 25 4
gpt4 key购买 nike

JVM specification可以看出这段代码:

void spin() {
int i;
for (i = 0; i < 100; i++) {
; // Loop body is empty
}
}

应该编译成:

0   iconst_0
1 istore_1
2 goto 8
5 iinc 1 1
8 iload_1
9 bipush 100
11 if_icmplt 5
14 return

条件检查 if_icmplt 在循环体之后,但是当我自己编译它并用 javap 查看时,我看到:

0:   iconst_0
1: istore_1
2: iload_1
3: bipush 100
5: if_icmpge 14
8: iinc 1, 1
11: goto 2
14: return

循环条件在循环体之前。为什么会这样?

在 body 之后放置 condition 可以防止我们在每个循环之后执行 goto 并且在我看来是合乎逻辑的。那么为什么 OracleJDK 采用另一种方式呢?

最佳答案

这不是为了更好的 JIT 优化 - 对于 JIT,这些代码片段是等价的。这是因为在 javac 中进行优化是没有意义的,因为 JIT 优化无论如何都更强大。

关于java - 在 Java 中编译循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15946603/

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