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

前端之家收集整理的这篇文章主要介绍了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应用程序开始更慢.

猜你在找的Java相关文章