有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java instanceof vs多态性为什么instanceof更快?

好的,我在做一些测试,instanceof似乎比多态性更快。所以我发现这个very interesting answer压缩了我的测试。instanceof速度更快

将我的应用程序的一个方法改为instanceof if else(7个类),而不是多态性,将其负载降低了近3%。(根据我的自定义分析器,每秒对该方法的调用超过50000次)-另外,请记住,所讨论的方法只返回int,零计算,绝对没有什么特别之处

问题:不幸的是,我找不到任何真正的原因信息。所以,从技术上来说,一个巨人怎么可能比一个简单的多态性/访问者更快呢

基准测试的源代码:https://github.com/michaeldorner/instanceofBenchmark


共 (1) 个答案

  1. # 1 楼答案

    JVM最多只能从一个调用站点内联2个可能的实现。这意味着,如果您有2个以上的代码,则在某些情况下,代码不会得到优化

    相反,如果您只执行If/else,那么很可能只需要调用一个实现,因此它可以全部内联

    内联是许多优化技术的关键特性

    简言之,如果您有一个megamorphic调用,那么如果代码足够热,您可以通过重构它来看到一个小而显著的改进。 http://insightfullogic.com/2014/May/12/fast-and-megamorphic-what-influences-method-invoca/