Use invokedynamic to implement multiple dispatch

后端 未结 2 499
长情又很酷
长情又很酷 2021-02-06 04:29

I wondered if Java7\'s new invokedynamic bytecode instruction could be used to implement multiple dispatch for the Java language. Would the new API under java.lang.

相关标签:
2条回答
  • 2021-02-06 05:10

    Since I have no experience with invokedynamic, I do not know how good the performance and type-safety would be, but can only give some pointers:

    • the Da Vinci Machine Project offers multiple dispatch via invokedynamic (see Multiple Dispatch/src/invokedynamicmultipledispatch/);
    • Charles Oliver Natter has talked about applications of invokedynamic on JAX2012. The slides do not go into details at all, but I think I came across more details in a video or podcast talking about JAX2012, which I cannot find right now.
    • Christopher Dutchyn's JVM Multiple Dispatch is an alternative approach without invokedynamic. His COOTS '01 Paper and these slides have a lot of performance information/benchmarking (and are a good read after you've finished your disseration ;)
    0 讨论(0)
  • 2021-02-06 05:18

    The instruction invokedynamic is purely a JVM instruction, it does not relate to dynamic dispatch. The dispatch is completed by method handles (method handle graph and method handle tree are also OK.) that comprises multiple method handle instances. A path in the graph (tree) represents one dispatch path.

    For your given sample, i would possible construct a graph (Different people might have different graph result ). IN this graph, the traverse of method handles in the graph is the way how disptach completes.

    sample method handle tree

    0 讨论(0)
提交回复
热议问题