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

时间:2018-08-29 07:19:37

标签: java performance

好的,我正在做一些测试,instanceof似乎比多态性要快。因此,我找到了very interesting answer来证明我的测试合格。 instanceof更快。

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

问题所在::不幸的是,我找不到有关其原因的任何真实信息。那么,从技术上讲真的很深,一个巨人(如果能比简单的多态性/访问者更快)又怎么会更快?

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

1 个答案:

答案 0 :(得分:0)

JVM仅可从调用站点内联多达2种可能的实现。这意味着,如果您有超过2个,则在某些情况下,代码将不会得到优化。

如果相反,您只做if / else,则可能只有一个实现要调用,因此可以全部内联。

内联是许多优化技术的关键功能。

简而言之,如果您进行了宏调用,则可以在代码足够热的情况下对其进行重构,从而看到一个很小但重要的改进。 http://insightfullogic.com/2014/May/12/fast-and-megamorphic-what-influences-method-invoca/