Java方法调用比C++中的虚方法调用更快?

dte*_*ech 4 c++ java performance virtual call

在维基百科中偶然发现了这个:

由于C++的额外虚拟表查找,Java可以比C++访问派生的虚方法更快地访问派生实例方法.但是,C++中的非虚方法不会受到V-Table性能瓶颈的影响,因此表现出与Java类似的性能.

它是否正确?据我所知,ALL调用在Java中是虚拟的,仍然依赖于虚拟表,因此我的常见逻辑表明Java调用不可能比虚拟C++调用更快.

我是误导还是文章错了?无论如何 - 在运行时解析调用的方法是否比虚拟表更快?

Dan*_*rey 7

它可能与JIT编译执行的优化有关.在某些情况下,我可以想象JVM会检测到某个(虚拟)调用始终引用某个实现并且不需要查找.

OTOH,一个C++编译器也可能推断出在某些情况下不需要查找并产生同样好的代码.此外,C++不需要虚函数,因此Java没有提供替代方案.

也就是说,如果您需要virtualC++ 中提供的功能,那么通常没有我能想到的更好的选择.如果您关心性能,请注意virtual通常确实有成本,并且只应在需要时使用.

一般来说,我发现你所引用的陈述无益和误导(当然不是你的错).