Java virtual machine 2026-11-05
The Java virtual machine is the abstract execution machine specified for Java class files and bytecode. It defines runtime data areas, stack frames, operand stacks, local variables and instruction behavior, while leaving implementation choices such as interpretation and just-in-time compilation open.[ref]
For example, two integer loads followed by an integer-add instruction obtain operands from a stack frame and leave their sum on its operand stack. A method call establishes a new stack frame and later returns a result to its caller. These specified effects remain the contract even if a compiler keeps the values in native registers and emits one machine instruction. The virtual-machine interface therefore supports portable compiled code without requiring every implementation to execute bytecode one instruction at a time.
Operand stack 2026-11-05
An operand stack holds intermediate values used by bytecode operations in a Java virtual machine method invocation. Each stack frame has its own last-in-first-out operand stack, initially empty; its maximum depth is recorded in the class file. Values can be loaded from local variables, consumed by operations and replaced by results.[ref]
Starting from an empty operand stack, iconst_2; iconst_3; iadd produces the successive contents 2, 2,3 and 5, with the top shown at the right. The addition consumes both operands. This abstract execution rule does not require a physical memory push for each operation: just-in-time compilation may retain values in processor registers while preserving the specified behavior.