【问题标题】:InvokeDynamic - how to acces arguments in bootstrap method?InvokeDynamic - 如何在引导方法中访问参数?
【发布时间】:2011-11-27 18:04:26
【问题描述】:

我正在尝试在 JVM7 中使用 invokedynamic 实现“鸭子打字”。我创建了两个不同的类,它们都具有返回String 的方法greet()。我在其中一个中随机选择,将实例存储在堆栈中并调用invokedynamic(使用 ASM)。

我想知道我是否可以在引导方法中访问参数。因为我不能在不知道堆栈中的对象以及应该返回哪个greet() 方法的情况下返回适当的CallSitetarget

如果我的方法是错误的,那么正确的方法是什么?

【问题讨论】:

    标签: java jvm java-7 bootstrapping invokedynamic


    【解决方案1】:

    我会自己回答。

    1. 用你自己的静态方法绑定CallSite(例如lookup(CallSite cs, Object[] args)
    2. args[0] 是接收者,其余的是参数。在查找方法中做任何你想做的事情。

    如果您对内联缓存感兴趣(我曾经),请查看以下两个链接:

    【讨论】:

    • 这没什么用...在invokedynamic 调用之前,您是否将被调用者和参数放入数组中?
    • 如果您还能详细介绍您的解决方案,那就太好了。
    猜你喜欢
    • 1970-01-01
    • 2012-01-01
    • 2016-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多