invokedynamic相关

关键概念

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

动态调用点

3种类型的动态调用点

关键流程

invokedynamic的绑定

示例代码

参考

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 虚拟机把描述类的数据从Class文件加载到内存, 并对数据进行校验、转换解析和初始化, 最终形成可以被虚拟机直接使...
    好好学习Sun阅读 1,287评论 0 3
  • 代码编译的结果从本地机器码转变为字节码,是存储格式发展的一小步,确实编译语言发展的一大步。 虚拟机把描述类的数据从...
    胡二囧阅读 1,003评论 0 0
  • 1.Class类文件 1.1 Java跨平台的基础 各种不同平台的虚拟机与所有平台都统一使用的程序存储格式——字节...
    王侦阅读 734评论 0 0
  • 《深入理解Java虚拟机》笔记_第一遍 先取看完这本书(JVM)后必须掌握的部分。 第一部分 走近 Java 从传...
    xiaogmail阅读 5,244评论 1 34
  • 1 3月29日,这一天是田老爷子六十大寿的日子。 田丽诺,田丽萌两姐妹一大早就到父母家了。她们两个边帮母...
    哈哈的情感故事铺子阅读 371评论 0 0