微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Java如何在虚拟函数边界内嵌?

我正在阅读一些材料,说明 Java是否可以比C快,并且遇到以下报价:

“Java可以比C快,因为JIT可以在虚拟函数边界内嵌.”

(http://www.jelovic.com/articles/why_java_is_slow.htm)

这是什么意思?这是否意味着JIT可以内联虚函数调用(因为大概可以访问运行时信息),而C必须通过其vtable调用函数

谢谢

塔拉斯

解决方法

你的问题的答案是是的:这就是引用的文字的意思.

JIT将分析所有加载的类.如果可以确定在任何给定点只能有一种可以调用方法,则可以避免派生和(如果适用)内联方法体.

相比之下,C编译器不知道所有可能的子类型,因此无法确定是否可以为(虚拟)方法完成此优化. (当链接器运行的时候,太晚了…)

其他答案表示您可以在C中手动进行此优化,但假设您(程序员)可以自己进行分析,并将方法从虚拟变为非虚拟.但是如果你错了,你有一个错误可以跟踪.

顺便说一下,我们可以假设这种优化对于一般的Java应用来说是值得的.如果不是,JIT编译器家伙不会实现它.毕竟,无价值的优化只会使Java应用程序开始更慢.

原文地址:https://www.jb51.cc/java/123592.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐