Tre*_*ent 11 java jit function
我正在阅读一些关于Java是否比C++更快的材料,并且遇到了以下引用:
Java可以比C++更快,因为JIT可以内联虚拟功能边界.
为什么Java总是比C++慢(返回链接)
这是什么意思?这是否意味着JIT可以内联虚函数调用(因为可能它可以访问运行时信息)而C++必须通过其vtable调用函数?
Ste*_*n C 11
您的问题的答案是肯定的:这就是引用文本的含义.
JIT将分析所有已加载的类.如果它可以确定在任何给定点只能调用一种可能的方法,则可以避免调度和(如果适用)内联方法体.
相比之下,C++编译器不知道所有可能的子类型,因此无法确定是否可以对(虚拟)方法执行此优化.(当链接器运行时,为时已晚......)
其他答案说你可以在C++中手动进行优化......但是假设你(程序员)可以自己进行分析,并将方法从虚拟变为非虚拟.但如果你弄错了,你就有一个要追查的错误.
顺便说一句,我们可以假设这种优化对于普通的Java应用程序来说是值得的.如果不是,JIT编译器人员就不会实现它.毕竟,一个毫无价值的优化只会让Java应用程序启动得更慢.