普通调用指令与动态调用指令
普通调用指令:
- invokestatic:调用静态方法,解析阶段确定唯一方法版本。
- Invokespecial:调用<init>方法、私有及父类方法,解析阶段确定唯一方法版本。
- Invokevirtual:调用所有虚方法。
- Invokeinterface:调用接口方法。
动态调用指令:
- Invokedynamic:动态解析出需要调用的方法,然后执行。
普通调用指令固化在虚拟机内部,方法的调用执行不可人为干预,而invokedynamic指令则支持由用户确定方法版本。其中invoke static指令和invokespecial指令调用的方法称为非虚方法,其余的(final修饰的除外)称为虚方法。
欢迎批评指正,提出问题,谢谢!