3

作为开发人员,我想知道调用虚拟方法与接口方法的成本是多少。现在,我知道为什么invokeinterface可以比 慢invokevirtual,但我想知道 Sun 是否在他们发布的 JVM 的最新版本中采用了新的机制来改进invokeinterface. 我怎样才能找到这样的信息?

4

1 回答 1

0

收购了 Sun 的 Oracle 在其网站上提供了有关 HotSpot JVM 的旧 Sun 白皮书:

http://java.sun.com/products/hotspot/docs/whitepaper/Java_HotSpot_WP_Final_4_30_01.html

至于您最初关于invokevirtualvs的问题invokeinterface,Sun 已经做了很多非常积极的性能优化来尝试改进这一点。他们使用的众多技术之一称为多态内联缓存,它可以将接口调度的运行时开销显着简化到与常规invokevirtual调度相同或更好的水平。这个想法是跟踪每个调用站点附近的一个小表,跟踪调用站点经常使用的类型。每当调用接口方法时,调用该方法的对象可以将其类型与已知类型进行比较,如果匹配,则可以通过在小缓存中查找应该调用哪个方法来快速进行调用。

此外,我相信 HotSpot 使用动态分析来试图证明在某些程序点上,接口指针所引用的对象的类型正是某种特定类型。如果是这样,则可以完全内联调用,也可以在不需要任何进一步动态查找的情况下解决该调用。

希望这可以帮助!

于 2011-08-14T03:30:50.007 回答