繁体   English   中英

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

[英]instanceof vs polymorphism - Why is instanceof faster?

好的,我在做一些测试,instanceof 似乎比多态更快。 所以我发现了这个非常有趣的答案,它完善了我的测试。 instanceof 更快。

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

问题:不幸的是,我找不到任何关于原因的真实信息。 所以,从技术上讲,真的很深,一个巨大的 if else 怎么能比一个简单的多态/访问者更快?

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

JVM 最多只能从调用站点内联 2 个可能的实现。 这意味着如果您有 2 个以上,代码将不会针对某些情况进行优化。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM