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

我正在开发一个业余的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 

有任何想法吗?

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