为了账号安全,请及时绑定邮箱和手机立即绑定

Java中if/etc与Switch语句的相对性能差异是什么?

Java中if/etc与Switch语句的相对性能差异是什么?

精慕HU 2019-07-20 12:41:27
Java中if/etc与Switch语句的相对性能差异是什么?考虑到我的web应用程序的性能,我想知道“if/etc”或Switch语句中哪一个在性能方面更好?
查看完整描述

3 回答

?
慕村225694

TA贡献1880条经验 获得超4个赞

我完全同意这样的观点,即过早优化是应该避免的。

但确实,JavaVM有特殊的字节码,可以用于Switch()的字节码。

因此,如果代码是性能CPU图的一部分,则可能会提高一些性能。


查看完整回答
反对 回复 2019-07-20
?
慕姐8265434

TA贡献1813条经验 获得超2个赞

如果/否则或切换将是性能问题的根源,这是非常不可能的。如果您有性能问题,您应该首先进行性能分析,以确定慢点在哪里。过早优化是万恶之源!

然而,通过Java编译器优化,可以讨论开关相对于if/etc的相对性能。首先请注意,在Java中,开关语句在非常有限的域-整数上运行。通常,您可以按以下方式查看开关语句:

switch (<condition>) {
   case c_0: ...
   case c_1: ...
   ...
   case c_n: ...
   default: ...}

哪里c_0c_1.和c_N是开关语句的目标整数,以及<condition>必须解析为整数表达式。

  • 如果这个集合是“稠密的”-也就是说,(max(C)i)+1-min(C)i)/n>α,其中0<k<α<1,其中k大于某些经验值,可以生成跳转表,这是高效的。

  • 如果这个集合不是很密集,但是n>=β,那么二进制搜索树可以在O(2*log(N)中找到目标,这仍然是有效的。

对于所有其他情况,开关语句与if/etc语句的等效序列完全一样有效。α和β的精确值取决于许多因素,并由编译器的代码优化模块决定。

最后,当然,如果<condition>不是整数,开关语句是完全无用的。


查看完整回答
反对 回复 2019-07-20
  • 3 回答
  • 0 关注
  • 865 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信