码迷,mamicode.com
首页 > 编程语言 > 详细

java动态语言invokedynamic(2)

时间:2015-09-04 11:06:06      阅读:174      评论:0      收藏:0      [点我收藏+]

标签:

  从某种程度上,invokedynamic与MethodHandle机制的作用是一样的,都是为了解决原来的4条指令"invoke*"指令方法将分派规则固化在虚拟机中的问题,如何将查找方法的决定权从虚拟机转移到具体的用户代码中。可将它们想象成一个使用上层的java API实现,另一个使用字节码中和class中的其它属性,常量来完成。

  含有invokedynamic指令的位置被称为动态调用点(Dynamic Call Site),这个指令的第一个参数不再是代表方法符号引用 的CONSTANT_Methodref_info常量,而是jdk1.7中的CONSTANT_InvokeDynamic_info常量,里面有3个信息:

1.引导方法(Bootstrap Method),有固定的参数,且返回值是java.lang.invoke.CallSite对象,代表真正要执行的方法调用。

2.方法类型(MethodType)

3.方法名称

  这样我们就可以根据CONSTANT_InvokeDynamic_info常量中的信息找到并执行引导方法,并得到一个CallSite对象,最终调用要执行的方法。

 

java动态语言invokedynamic(2)

标签:

原文地址:http://www.cnblogs.com/chuiyuan/p/4781353.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!