普通调用指令与动态调用指令

普通调用指令:

  • invokestatic:调用静态方法,解析阶段确定唯一方法版本。
  • Invokespecial:调用<init>方法、私有及父类方法,解析阶段确定唯一方法版本。
  • Invokevirtual:调用所有虚方法。
  • Invokeinterface:调用接口方法。

动态调用指令:

  • Invokedynamic:动态解析出需要调用的方法,然后执行。

普通调用指令固化在虚拟机内部,方法的调用执行不可人为干预,而invokedynamic指令则支持由用户确定方法版本。其中invoke static指令和invokespecial指令调用的方法称为非虚方法,其余的(final修饰的除外)称为虚方法。

posted @ 2020-09-12 15:54  Eleanor123  阅读(212)  评论(0编辑  收藏  举报