JVM方法调用指令有5条:
指令 | 功能 |
invokestatic | 调用static方法 |
invokespecial | 调用父类的构造方法,实例构造方法,private方法 |
invokevirtual | 调用实例public&protected方法 |
invokeinterface | 调用接口方法 |
invokedynamic | 调用动态方法 |
根据是否可以在编译阶段唯一确定调用方法版本,可以分为:解析调用和分派调用
1,解析调用(Resolution) : 编译期可知,运行期不变
解析调用是一个静态的过程,在编译期就完全确定,在类加载的解析阶段就会把涉及的符号引用全部转变为可确定的直接引用。
解析调用的方法包括invokestatic, invokespecial, 以及invokevirtual调用final方法,它们被成为非虚方法。
2,分派调用(Dispatch)
invokevirtual, invokedynamic, invokeinterface