java - 哪些 Java 代码会强制 javac 1.6 使用 'swap' 和 'nop' 操作码?

标签 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

有什么想法吗?

最佳答案

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

关于java - 哪些 Java 代码会强制 javac 1.6 使用 'swap' 和 'nop' 操作码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9722421/

相关文章:

Java:具有非透明组件的透明窗口?

java - 具有 XML 模式的泛型

java - 重新部署 JBoss AS war 后最终静态值未更新

java - Java 编译器上下文中的 'generated source files' 是什么?

java - 为什么我无法获取 javac -version?

java - RCP 的 exec 启动器在启动时找不到配套共享库,但通过单击 org.eclipse.equinox.launcher_1.2.0.v20110502.jar 启动

java - 为什么 jar list 文件不应包含超过 72 字节的行

java - 一个有用的指标,用于确定 JVM 何时将陷入内存/GC 故障

java - javac 完成的任何类型转换?

java - 如何创建传递给 Zstd.compress 的字典对象?