invokevirtual_quick

Invoke instance method

Bytecode

Type Description
u1 invokevirtual opcode = 0xD6 (214)
u1 index
u1 nargs

Stack ..., objectref, [arg1, [arg2 ...]] => ...

Description The objectref must be of type reference and must reference a class instance. The index operand is an unsigned byte, and the nargs operand is an unsigned byte, which must not be zero. The index is an index into the method table of the class of the type of objectref. The table entry at that index includes the method's code and its modifier information.

If the method is synchronized, the monitor associated with objectref is acquired.

If the method is not native, the nargs - 1 words of arguments and objectref are popped from the operand stack. A new stack frame is created for the method being invoked, and objectref and the words of arguments are made the values of its first nargs local variables, with objectref in local variable 0, arg1 in local variable 1, and so on. The new stack frame is then made current, and the Java Virtual Machine pc is set to the opcode of the first instruction of the method to be invoked. Execution continues with the first instruction of the method.

If the method is native and the platform-dependent code that implements it has not yet been loaded and linked into the Java Virtual Machine, that is done. The nargs - 1 words of arguments and objectref are popped from the operand stack; the code that implements the method is invoked in an implementation-dependent manner.

Exceptions

NullPointerException - objectref is null

Notes

The opcode of this instruction was originally invokevirtual, with objectref not referring to an instance of java.lang.Object and with operands determined dynamically to represent a method with a method table index of 255 or less. When the constant pool entry referenced by an invokevirtual instruction is resolved, a one-byte index for the method it references is generated. That index replaces the first operand byte of the original invokevirtual instruction. The second operand byte of the invokevirtual instruction is replaced by nargs, the number of argument words expected by the method.

An invokevirtual instruction referring to an instance of java.lang.Object and with operands representing a constant pool index of 255 or less will instead be converted into an invokevirtualobject_quick instruction. Any invokevirtual instruction with operands representing a constant pool index greater than 255 will be converted into an invokevirtual_quick_w instruction.