10

我正在研究一个业余 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

有任何想法吗?

4

1 回答 1

7

没有任何。Java 语言规范不提供此类保证。您可以使用Jasmin(一种字节码汇编器)编写自己的 Java 字节码。

于 2012-03-15T15:02:43.347 回答