我正在研究一个业余的 JVM 实现,我正在努力确保我对规范中的所有操作码都有测试覆盖率。我已经把它归结为最后几个,但是 nop
和 swap
一直在躲避我。例如,这是一个可能使用 swap
的简单函数:
static int do_swap() {
int a = 56;
int b = 32;
return b%a;
}
但是 javac 1.6
生成的字节码避免了交换以代替本地存储:
static int do_swap();
Code:
0: bipush 56
2: istore_0
3: bipush 32
5: istore_1
6: iload_1
7: iload_0
8: irem
9: ireturn
有什么想法吗?
最佳答案
没有。 Java 语言规范不提供此类保证。您可以使用 Jasmin 编写自己的 Java 字节码。 (字节码汇编程序)。
关于java - 哪些 Java 代码会强制 javac 1.6 使用 'swap' 和 'nop' 操作码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9722421/