Java 需要呼叫站点解释
从文件中 调用站点是变量MethodHandle的持有者,称为其目标。链接到CallSite的InvokedDynamic指令将所有调用委托给站点的当前目标。一个调用站点可能与几个invokedynamic指令相关联,也可能是“自由浮动”的,不与任何指令相关联。在任何情况下,都可以通过称为其动态调用器的关联方法句柄调用它 问题:Java 需要呼叫站点解释,java,lambda,java-8,Java,Lambda,Java 8,从文件中 调用站点是变量MethodHandle的持有者,称为其目标。链接到CallSite的InvokedDynamic指令将所有调用委托给站点的当前目标。一个调用站点可能与几个invokedynamic指令相关联,也可能是“自由浮动”的,不与任何指令相关联。在任何情况下,都可以通过称为其动态调用器的关联方法句柄调用它 问题: CallSite中的目标是否可以更改?怎样?请提供一个代码示例 调用站点如何与多个invokedynamic指令关联 什么是“自由浮动”呼叫站点?如何创建它 编辑
invokedynamic
指令关联
CallSite
s编辑:我认为您误解了文档,我认为您永远不应该直接从您的代码初始化
CallSite
,因为它没有任何用处,文档的存在是为了告知它的功能,JVM使用它为invokedynamic
指令提供方法句柄。我的问题更多的是关于如何在代码中实现它?正如您所说,CallSite不应由开发人员创建,因此我想知道如何编写代码,以便编译器执行这三点。JSR贡献者创建了CallSites和InvokedDynamic“旨在增强JVM对动态类型语言的支持”由于LambdaMetafactory
仅创建ConstantCallSite
s,因此没有编译示例,我建议您看看。由于LambdaMetafactory仅创建ConstantCallSites,因此没有编译示例。你能分享一些链接来证明这一点吗?LambdaMetaFactory,非常棒。一个令人兴奋的问题:当说CallSite将返回
或调用CallSite时
是什么意思?获取CallSIte对象后,调用FunctionInterface方法时如何调用lambda desugared方法?1。答案是肯定的。从字面上回答其他问题:2。通过让bootstrap方法多次返回相同的CallSite
实例。3.每个CallSite
对象最初都是自由浮动的,直到在invokedynamic
链接过程中由引导方法返回为止。如果你在这样的过程中不归还它,它将保持自由浮动。@Holger:现在清楚了。您能在下面答案的最后一条评论中回答我的问题吗?不清楚您在该评论中问了什么。@霍尔格:我想知道,当调用FunctionInterface的单个抽象方法时,调用如何转到desugared方法?正如其他评论所说,LambdaMetaFactory
生成一个类。该类使用将调用目标方法的方法实现接口。