java - 为什么 JVM 有 iconst_2 - iconst_5 操作码?

标签 java jvm opcodes

在阅读 JVM 规范时(正如我所做的那样),当我遇到 7 iconst_<i> 时,我感到非常惊讶。操作码。毕竟,只有一个字节可以玩。

我很少在代码中写 2、3、4 或 5 的文字。我能理解为什么 -1、0 和 1 可能会被特殊对待,但令我惊讶的是,设计师竟然想在恰好非常小的数字上使用 4 个宝贵的操作码。

有谁知道这是否有充分的理由?我是否低估了这些的好处?

最佳答案

我认为,您的假设是正确的:只是为了让字节码更小,让 Java 解释器更快一点(当时没有 JIT 编译器)。请注意,这些字节码的使用频率可能比您预期的要高得多。例如,考虑以下代码:

int[] a = {10, 20, 30, 40};

实际上它被编译成类似这样的东西:

int[] a = new int[4];
a[0] = 10;
a[1] = 20;
a[2] = 30;
a[3] = 40;

所以这里使用 iconst_0iconst_4,即使源代码中没有这样的常量。

关于java - 为什么 JVM 有 iconst_2 - iconst_5 操作码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30744648/

相关文章:

Android小问题

java - 将 libgdx 项目导入 Eclipse 时未绑定(bind)类路径变量 junit 和 log4j

java - 如何@Autowired 服务的具体实现?

java - 需要在 Netbeans 上创建一个 WIZARD(jDialog vs CardLayout)?

java - 如何测量Java中的堆栈内存?

android - 我如何执行 Dalvik 操作码

java - 如何删除Android线程中使用的final变量

java - JVM 没有释放虚拟内存

java - 是否有任何 BSD 许可的 Oracle JVM(Windows)替代方案?

fetch - Z80内存刷新寄存器