java - JVM字节码中的NOP是干什么用的?

标签 java jvm bytecode no-op

在当今的 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/

相关文章:

Java ZK从iframe传递参数到ZUL不同的服务器

Java 程序在 Microsoft Server 上每个用户一个进程

java - 盒子布局问题

java - 在 Java 中实现 SQL CHECKSUM

java - 如何在java Stream中捕获拆分的字符串

java - 如何知道JVM配置的目标?

java - 对实习生字符串、字符串池和永久空间的垃圾收集

bytecode - 每次到达该行时是否重新解释解释语言的代码?

java - 从字节码解析类名

java - 从 C 源代码到 Java 字节码?