What is the NOP in JVM bytecode used for?

bytecode, java, jvm, no-op

Solution

Some `NOP` bytecode use cases are for `class` file transformations, optimizations and static analysis performed by tools such as Apache BCEL, ASM, FindBugs, PMD, etc. The Apache BCEL manual touches on some uses of `NOP` for analysis and optimization purposes.

A JVM may use `NOP` bytecodes for JIT optimizations to ensure code blocks that are at synchronization safepoints are properly aligned to avoid false sharing.

As for some sample code compiled using the JDK `javac` compiler that contains `NOP` bytecodes, that's an interesting challenge. However, I doubt the compiler will generate any `class` file containing `NOP` bytecodes since `the bytecode instruction stream is only single-byte aligned`. I would be curious to see such an example, but I can't think of any myself.

Problem

Are there any practical uses of the Java Virtual Machine's `NOP` opcode in today's JVM? If so, what are some scenarios in which `NOP`s would be generated in bytecode? I would even be interested to see an example of Java code that compiles into bytecode with `NOP`s. Update BCEL's MethodGen class says, While generating code it may be necessary to insert NOP operations. I am guessing other Bytecode generation libraries are in the same boat, as was pointed out in the accepted answer.

Original source