首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >InvokeDynamic参数的动态类型

InvokeDynamic参数的动态类型
EN

Stack Overflow用户
提问于 2015-07-12 11:39:16
回答 2查看 313关注 0票数 2

为了支持动态类型和方法分派,我的编程语言引入了一个名为dynamic的类型。在调用类型为dynamic的被调用方上的方法时,编译器首先推送堆栈上的被调用方和所有参数,然后生成invokedynamic指令而不是普通的invoke*指令。指令指向名为DynamicLinker的类中的一个特殊引导方法,但只有静态类型在调用时可用。

My :如何获得传递给invokedynamic指令的参数的运行时类型?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-07-12 23:32:46

invokedynamic的“动态”部分并不意味着方法参数可以具有动态类型。这意味着可以定制invoke指令的行为。invokedynamic参数的确切类型在编译时是已知的。

票数 3
EN

Stack Overflow用户

发布于 2015-07-13 16:10:25

invokedynamic的重点不是要实现一个动态类型系统。这将是一个巨大的变化,影响到JVM的许多部分,甚至在不使用该功能的地方也可能导致性能下降,但好处微乎其微:毕竟,每种动态语言都有不同的类型系统概念。

相反,invokedynamic允许您实现动态类型系统。您完全可以这样做,JVM和hotspot优化器可以这样做,但要使用自己的语义。因此,您正在实现一个动态方法调用调度程序,就像不使用invokedynamic一样。在第一次调用中,您将链接到动态调度程序,它将使用参数的运行时类型来查找目标。但是它也可能记录目标,并且如果它发现某个特定的呼叫站点具有单一的行为,它的目标可能被重定向到一个优化的调度程序,甚至直接转到目标方法,这取决于您如何防止后续行为的变化。例如,如果运行时将检测相关不变量的无效,例如通过将新类型加载到运行时,则可以将调用站点直接链接到目标,并在目标发生无效时更改目标(再次)。或者,您将调用定向到一个哨兵代码,它在执行优化调用之前检查优化调用的先决条件,假设对已知先决条件的检查比完整的动态查找更快。

如前所述,这类似于优化技术,JVM使用自己进行带有Java语义的调用。但是,您可以控制现有类型的调用以及如何解决它们。当然,在不使用invokedynamic指令的情况下,您可以使用普通的对象结构对您的类型系统进行建模,但是,invokedynamic指令允许您告诉JVM调用方和被调用者的语义,然后HotSpot优化器可以使用这些语义在它们之间建立直接链接。

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

https://stackoverflow.com/questions/31367365

复制
相关文章

相似问题

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