【发布时间】:2013-02-01 21:11:38
【问题描述】:
刚刚在维基百科中偶然发现了这个:
Java 可以比 C++ 更快地访问派生实例方法 由于 C++ 的额外虚拟表查找而派生的虚拟方法。 但是,C++ 中的非虚方法不受 V-Table 的影响 性能瓶颈,因此表现出类似的性能 Java的。
这是正确的吗?据我所知,Java 中的所有调用都是虚拟的,并且仍然依赖于虚拟表,因此我的常见逻辑表明 Java 调用不可能比虚拟 C++ 调用更快。
是我误导还是文章有误?无论如何 - 有没有比虚拟表更快的方法在运行时解决调用?
【问题讨论】:
-
除非它解释了 Java 如何处理多态调用,否则我很想在这方面打电话给 BS。 (我相信它也使用 v-tables。)
-
PS 虽然我知道的每个编译器都使用 v-tables,但据我所知,标准并没有规定必须这样做;他们可以使用任何他们想要的虚拟调度方法。
-
这是营销。 Java 中的 一些 调用可能比 C++ 虚拟调用更快,但大多数调用在 C++ 中不是虚拟调用。然后呢?
-
你必须非常努力地让我相信 C++ 中的 vtable 查找,它只是一个额外的索引间接,即一条指令,比 Java 需要做的任何事情都具有更高的成本。跨度>
-
@EJP - 文字只是说 Java 中最快的函数调用可以比 C++ 中最慢的函数调用更快。营销说话!
标签: java c++ performance call virtual