首页 > 编程语言 > 详细

java动态语言invokedynamic(2)

时间:2015-09-04 11:05:01      阅读:287      评论: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
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!