在阅读 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_0
到 iconst_4
,即使源代码中没有这样的常量。
关于java - 为什么 JVM 有 iconst_2 - iconst_5 操作码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30744648/