加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

发布时间:2020-12-14 05:03:55 所属栏目:Java 来源:网络整理
导读:我正在阅读一些材料,说明 Java是否可以比C快,并且遇到以下报价: “Java可以比C快,因为JIT可以在虚拟函数边界内嵌.” (http://www.jelovic.com/articles/why_java_is_slow.htm) 这是什么意思?这是否意味着JIT可以内联虚函数调用(因为大概可以访问运行时信息
我正在阅读一些材料,说明 Java是否可以比C快,并且遇到以下报价:

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

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

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

谢谢

塔拉斯

解决方法

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

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

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

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读