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

普通调用指令:

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

动态调用指令:

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

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

欢迎批评指正,提出问题,谢谢!
原文地址:https://www.cnblogs.com/xxeleanor/p/13657325.html