java - 需要CallSite解释

标签 java lambda java-8

来自 CallSite文件

A CallSite is a holder for a variable MethodHandle, which is called its target. An invokedynamic instruction linked to a CallSite delegates all calls to the site's current target. A CallSite may be associated with several invokedynamic instructions, or it may be "free floating", associated with none. In any case, it may be invoked through an associated method handle called its dynamic invoker.


问题:
  • 可以更改 CallSite 中的目标吗?如何?请提供代码示例。
  • 一个 CallSite 如何关联多个 invokedynamic指示?
  • “自由 float ”CallSite 是什么意思?如何创建?

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

    最佳答案

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

  • 编辑:我认为你误解了文档,我认为你永远不应该初始化 CallSite直接来自您的代码,因为没有用,并且存在文档以告知它的作用,JVM 使用它为 invokedynamic 提供 MethodHandle操作说明。

    关于java - 需要CallSite解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63668261/

    相关文章:

    macos - 在 macOS 上打开终端时找不到任何与版本 "1.8.0_40"匹配的 JVM

    Java 8 方法引用

    Java Streams - 如果比较器存在则排序

    java - 如何解析 IPV4 和 IPV6 的数据库连接字符串

    java - 生产者/消费者线程根本没有输出数据

    c++ - 如果我在 lambda 中删除包含该 lambda 的对象,究竟会发生什么?

    java - 内部 lambda 引用 外部 lambda 变量

    java - 空指针异常(救命!)

    java - 无法运行maven

    c++ - C++ lambda的机制是什么?