invokedynamic相关

关键概念

  • invokedynamic指令:invokedynamic 是 Java 7 引入的一条新指令,用以支持动态语言的方法调用。具体来说,它将调用点(CallSite)抽象成一个 Java 类,并且将原本由 Java 虚拟机控制的方法调用以及方法链接暴露给了应用程序。在运行过程中,每一条 invokedynamic 指令将捆绑一个调用点,并且会调用该调用点所链接的方法句柄。
  • 方法句柄(MethodHandle):是一个强类型的,能够被直接执行的引用。该引用可以指向常规的静态方法或者实例方法,也可以指向构造器或者字段。当指向字段时,方法句柄实则指向包含字段访问字节码的虚构方法,语义上等价于目标字段的 getter 或者 setter 方法。
  • 方法句柄的类型(MethodType):是由所指向方法的参数类型以及返回类型组成的。它是用来确认方法句柄是否适配的唯一关键。当使用方法句柄时,我们其实并不关心方法句柄所指向方法的类名或者方法名。
  • 调用点(callSite):由启动方法生成,且被绑定到invokedynamic指令
  • 启动方法(BootStrap Method):生成前面提到的调用点,并且将之绑定至该 invokedynamic 指令中;

动态调用点

3种类型的动态调用点

关键流程

invokedynamic的绑定

示例代码

参考

你可能感兴趣的:(invokedynamic相关)