Java:比等效逻辑运算符按位OR和AND更快?

Pin*_*ade 6 java bit-manipulation

剪切和干燥...虽然我从来没有足够的逻辑操作来成为性能瓶颈 - 我想,我会更好地使用按位和(&)和按位或(|)而不是同名的逻辑运算符(&&和||)如果可能的话?也许这个问题可以通过我不知道将Java转换为程序集来查看操作数的事实来开头.

thk*_*ala 18

即使在Java代码执行中,按位运算符也避免使用分支指令.因此,您没有昂贵的分支预测错误,也没有任何跳转.

根据我的经验,当在经常执行的代码中使用时,它们可以显着更快.但请记住,按位运算符不是短路运算符,在某些情况下实际上可能会对性能产生负面影响.

也就是说,这种微优化只应作为最后的手段,并且只有在分析器告诉您这样做之后 - 可读性和可维护性首先出现.

  • +1用于调用功能差异(按位运算不会短路)! (5认同)

Som*_*ens 5

无论如何,其中大部分只会由编译器优化。一个快速的谷歌显示了这个方便的指南,以将您的 Java 视为汇编程序。我一直认为清晰易读的代码比少几纳秒的 CPU 时间更重要。

多亏了 JVM 的额外层,Java 并不是最伟大的语言。如果您对这种精确的优化感兴趣,您可能希望转向另一种语言,例如 C/C++。 此列表显示了您可能想要研究的语言。

  • 为什么包含高效且积极的编译器的额外层意味着极限速度是不可能的? (2认同)

kof*_*ann 5

我建议你在Parleys.com上观看Josh Bloch的"表现焦虑"演讲.http://www.parleys.com/#st=5&id=2103&sl=1