在哪里可以找到有关 Sun JVM 内部工作原理的信息?

发布于 2024-11-29 05:53:16 字数 194 浏览 2 评论 0 原文

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

As a developer, I want to know what the cost is of invoking a virtual method vs. interface method. Now, I know why invokeinterface can be slower than invokevirtual, but I wonder if Sun has adopted new mechanisms in the last versions of the JVMs they released that improved invokeinterface. How can I find such information?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

一身仙ぐ女味 2024-12-06 05:53:16

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

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

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

另外,我相信HotSpot使用动态分析来尝试证明在某些程序点,接口指针引用的对象的类型正是某种特定类型。如果是这样,则可以完全内联该调用,或者可以解析该调用,而无需任何进一步的动态查找。

希望这有帮助!

Oracle, which acquired Sun, has the old Sun white papers about the HotSpot JVM available on their website here at this site:

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

As for your initial question about invokevirtual versus invokeinterface, Sun has done a lot of very aggressive performance optimizations to try to improve this. One of the many techniques they use is called polymorphic inline caching and can dramatically simplify the runtime overhead of interface dispatches down to a level at or better than regular invokevirtual dispatches. The idea is to keep track of a small table near each invocation site tracking what types are often used at the call site. Whenever an interface method is invoked, the object that the method is invoked on can then have its type compared against the known types, and if it matches the call can be made quickly by looking up in a small cache which method ought to be invoked.

Additionally, I believe that HotSpot uses dynamic analysis to try to prove that at certain program points, the type of an object referred to by an interface pointer is exactly of some particular type. If so, then the call can be inlined entirely or can be resolved without needing any further dynamic lookup.

Hope this helps!

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文