标签:
从某种程度上,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对象,最终调用要执行的方法。
标签:
原文地址:http://www.cnblogs.com/chuiyuan/p/4781353.html