Java 多态性有时是否比if/elses慢?

Java 多态性有时是否比if/elses慢?,java,polymorphism,Java,Polymorphism,特别是在java中。多态重构的代码运行速度较慢。多态性是否可能是罪魁祸首,或者是否存在与多态性无关的令人困惑的性能流失。编写一些基准测试代码来完成每一项工作,并衡量其性能 其他一切都是猜测。理论上可能是因为JVM必须在运行代码之前加载类并创建其实例。If/else结构不需要加载其他类。但我从未见过真正的用例,当性能改进应该通过降低设计质量来完成。是的,多态性可能比if/else慢。这取决于平台(Java)的内部结构 但速度并不是使用多态性的原因。多态性用于使您的解决方案更易于阅读和理解—更易于维

特别是在java中。多态重构的代码运行速度较慢。多态性是否可能是罪魁祸首,或者是否存在与多态性无关的令人困惑的性能流失。

编写一些基准测试代码来完成每一项工作,并衡量其性能


其他一切都是猜测。

理论上可能是因为JVM必须在运行代码之前加载类并创建其实例。If/else结构不需要加载其他类。但我从未见过真正的用例,当性能改进应该通过降低设计质量来完成。

是的,多态性可能比if/else慢。这取决于平台(Java)的内部结构

但速度并不是使用多态性的原因。多态性用于使您的解决方案更易于阅读和理解—更易于维护

如果速度是一个重要问题,那么牺牲可维护性而不使用多态性是可以接受的

编辑:


正如许多评论和其他答案所指出的,不要盲目地做出决定。首先测量性能影响。

多态性较慢,原因有几个(例如动态方法查找)。正如上面的答案所提到的,这不是使用if/else而不是多态性的理由
final
说明符有时通过优化代码来帮助加快代码的速度。

您的答案与多态性有什么关系?即使是这样,只要多态性是一个更好的解决方案,任何理智的人都应该愿意付出性能代价(即经常).在你牺牲结构清晰性以换取性能之前,请确保这实际上是剩余的最大低效率。大多数系统可以从算法优化中获得比将多态类更改为一组switch语句更多的性能改进。