jsr_w

Operation
Jump subroutine (wide index)

jsr_w
branchbyte1
branchbyte2
branchbyte3
branchbyte4

Forms
jsr_w = 201 (0xc9)

Stack
... ..., address

Description
The address of the opcode of the instruction immediately following this jsr_w instruction is pushed onto the operand stack as a value of type returnAddress. The unsigned branchbyte1, branchbyte2, branchbyte3, and branchbyte4 are used to construct a signed 32-bit offset, where the offset is (branchbyte1 << 24) | (branchbyte2 << 16) | (branchbyte3 << 8) | branchbyte4. Execution proceeds at that offset from the address of this jsr_w instruction. The target address must be that of an opcode of an instruction within the method that contains this jsr_w instruction.

Notes
The jsr_w instruction is used with the ret instruction in the implementation of the finally clauses of the Java language (see Section 7.13, "Compiling finally"). Note that jsr_w pushes the address onto the stack and ret gets it out of a local variable. This asymmetry is intentional.

Although the jsr_w instruction has a 4-byte branch offset, other factors limit the size of a Java method to 65535 bytes (§4.10). This limit may be raised in a future release of the Java Virtual Machine.