首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用invokedynamic实现多个分派

使用invokedynamic实现多个分派
EN

Stack Overflow用户
提问于 2012-06-13 20:34:24
回答 2查看 1.1K关注 0票数 8

我想知道Java7的新invokedynamic字节码指令是否可以用于实现Java语言的multiple dispatch。java.lang.invoke下的新API会对执行这样的事情有帮助吗?

我所考虑的场景如下所示。(这看起来像是访问者设计模式的应用程序案例,但可能有一些原因导致这不是一个可行的选择。)

代码语言:javascript
复制
class A {} 
class A1 extends A {}
class A2 extends A {}

class SomeHandler {
    private void doHandle(A1 a1) { ... }
    private void doHandle(A2 a2) { ... }
    private void doHandle(A a) { ... }

    public void handle(A a) {
        MultipleDispatch.call(this, "doHandle", a);
    }
}

然后,库类MultipleDispatch将执行类似的操作:

代码语言:javascript
复制
class MultipleDispatch {

    public static Object call(Object receiver, String method, Object...arg) {
        // something like that in byte code
        #invokeDynamic "doHandle" "someBootstrap"
    }

    static CallSite someBootstrap {
        // resolve that dynamic method call.
    }
}

(我知道MultiJava,但这能以纯Java的方式实现吗?)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-06-17 17:19:48

因为我没有使用invokedynamic的经验,所以我不知道它的性能和类型安全性会有多好,只能给一些指针

  • the Da Vinci Machine Project通过invokedynamic提供多个分派(参见multiple Dispatch/src/invokedynamicmultipledispatch/);
  • Charles Oliver Natter has talked about applications of invokedynamic on JAX2012。这些幻灯片根本没有详细介绍细节,但我想我在谈论JAX2012的视频或播客中遇到了更多细节,我找不到正确的now.
  • Christopher Dutchyn's JVM Multiple Dispatch是一种没有invokedynamic的替代方法。

His COOTS '01 Paperthese slides有很多性能信息/基准测试(在您完成学位论文后是很好的读物;)

票数 2
EN

Stack Overflow用户

发布于 2014-11-12 11:45:20

指令invokedynamic纯粹是一条JVM指令,它与动态分派无关。分派由方法句柄完成(方法句柄图和方法句柄树也可以)。它由多个方法句柄实例组成。图(树)中的路径表示一条分派路径。

对于你给定的样本,我可能会构造一个图(不同的人可能会有不同的图结果)。在这个图中,遍历图中的方法句柄就是disptach的完成方式。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11014917

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档