gpt4 book ai didi

java - 为什么接口(interface)方法调用比具体调用慢?

转载 作者:行者123 更新时间:2023-12-01 05:19:14 24 4
gpt4 key购买 nike

当我发现抽象类和接口(interface)之间的区别时,我想到了这个问题。在 this post我开始知道接口(interface)很慢,因为它们需要额外的间接。但我不知道接口(interface)需要什么类型的间接,而不是抽象类或具体类所需的间接类型。请澄清一下。提前致谢

最佳答案

存在许多关于性能的误解,有些可能在几年前是正确的,有些在没有 JIT 的虚拟机上可能仍然是正确的。

Android 文档(请记住,Android 没有 JVM,他们有 Dalvik VM)曾经说过,在接口(interface)上调用方法比在类上调用方法慢,因此他们有助于传播这个神话(也有可能在打开 JIT 之前,Dalvik VM 上的速度较慢)。该文档现在确实说:

Performance Myths

Previous versions of this document made various misleading claims. We address some of them here.

On devices without a JIT, it is true that invoking methods via a variable with an exact type rather than an interface is slightly more efficient. (So, for example, it was cheaper to invoke methods on a HashMap map than a Map map, even though in both cases the map was a HashMap.) It was not the case that this was 2x slower; the actual difference was more like 6% slower. Furthermore, the JIT makes the two effectively indistinguishable.

来源:Designing for performance on Android

对于 JVM 中的 JIT 来说可能也是如此,否则会很奇怪。

关于java - 为什么接口(interface)方法调用比具体调用慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10675984/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com