来自CallSite文档

CallSite是变量MethodHandle的持有者,该变量称为其目标。链接到CallSite的invokedynamic指令将所有调用委派给站点的当前目标。一个CallSite可能与几个invokedynamic指令相关联,或者可能是“自由浮动”,与任何一个都不相关。在任何情况下,都可以通过称为其动态调用程序的关联方法句柄来调用它。

问题:

  • 是否可以更改CallSite中的目标?怎么样?请提供代码示例。
  • 如何将CallSite与多个invokedynamic指令关联?
  • “自由浮动” CallSite是什么意思?如何创建?

  • 编辑:
    注意:我想知道编写代码/ lambda的不同方法,以使这3点在程序中出现。

    最佳答案

  • 是的。可以通过 MutableCallSite 更改 VolatileCallSite CallSite#setTarget 中的目标
  • JVM规范的
  • This section定义如何初始化动态计算的CallSite。但是要回答这个问题,我认为这是设计使然。即JVM Spec说它应该用于JVM实现,并且编译器可以利用它来获得优势
  • 您不能像编译器那样直接在代码中创建CallSites,它只是用来声明可能存在“自由浮动”的CallSite

  • 编辑:我认为您误解了文档,我认为您永远不应该直接从代码中初始化CallSite,因为这没有用,并且文档存在以告知其功能,并且JVM使用它为invokedynamic指令提供MethodHandle 。

    08-17 00:46