gpt4 book ai didi

java - 当 exec (i/j) 和 (i % j) 时,jvm 会执行一还是两次计算?

转载 作者:行者123 更新时间:2023-11-30 01:46:15 26 4
gpt4 key购买 nike

我使用javap命令来制作字节码,有两条指令:idiv和irem。我知道div的结果存储在不同的寄存器中,jvm只会执行一次div操作吗?

int i = 10;
int a = i / 4;
int b = i % 4;

字节码:

Code:
stack=2, locals=4, args_size=1
0: bipush 10
2: istore_1
3: iload_1
4: iconst_4
5: idiv
6: istore_2
7: iload_1
8: iconst_4
9: irem
10: istore_3
11: return

最佳答案

如果您解释字节码,JVM 会将 idivirem 视为单独的(字节码)指令并单独执行它们。

如果您正在谈论已编译为 native 代码的代码,则它将取决于:

  • 您的执行平台上是否存在结合除法和余数的 native 指令1,以及
  • JIT 编译器是否利用该指令的功能。

您可以使用-XX+PrintAssembly选项来检查JIT编译器生成的内容。 (您还需要提供 -XX:UnlockDiagnosticVMOptions:请参阅 java 手册条目。)

请注意,答案可能取决于硬件和 Java 版本。

<小时/>

1 - 适用于 x86x86-64 的 32 位和 64 位 IDIV 指令。

关于java - 当 exec (i/j) 和 (i % j) 时,jvm 会执行一还是两次计算?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57840056/

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