在当今的 JVM 中,Java 虚拟机的 NOP
操作码是否有任何实际用途?如果是这样,在哪些情况下会在字节码中生成 NOP
?
我什至有兴趣查看使用 NOP
编译成字节码的 Java 代码示例。
更新
BCEL 的 MethodGen类说,
While generating code it may be necessary to insert NOP operations.
我猜其他字节码生成库也在同一条船上,正如已接受的答案中所指出的那样。
最佳答案
一些 NOP
字节码用例用于 class
文件转换、优化和由工具执行的静态分析,例如 Apache BCEL , ASM , FindBugs , PMD等。 Apache BCEL manual涉及 NOP
用于分析和优化目的的一些用途。
JVM 可以使用NOP
字节码进行 JIT 优化,以确保处于同步安全点的代码块正确对齐以避免 false sharing .
至于一些使用包含NOP
字节码的JDK javac
编译器编译的示例代码,这是一个有趣的挑战。但是,我怀疑编译器会生成任何包含 NOP
字节码的 class
文件,因为 the bytecode instruction stream is only single-byte aligned
.我很想看到这样的例子,但我自己想不出。
关于java - JVM字节码中的NOP是干什么用的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10422086/