什么Java代码会强制javac 1.6使用'swap'和'nop'操作码?

时间:2012-03-15 15:00:31

标签: java jvm javac bytecode opcode

我正在进行业余JVM实现,我正在努力确保我对规范中的所有操作码都有测试覆盖率。我已经把它归结为最后几个,但nopswap一直在逃避我。例如,这是一个可能使用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

有什么想法吗?

1 个答案:

答案 0 :(得分:6)

无。 Java语言规范不提供此类保证。您可以使用Jasmin(字节码汇编程序)编写自己的Java字节码。