n >> 3或n&3分别比n / 8或n%8有什么优势吗?

问题描述 投票:1回答:2

在我的程序存储器中,cpu时间受到限制,该计算将每秒进行约50000次。如果在算术上使用按位运算符,是否会提高性能?

java real-time
2个回答
2
投票

极不可能产生任何改变;几十年来,CPU都不在乎这种事情。

通常,如果您在没有任何实际迹象表明性能低于您的需求之前就担心性能,那将是一段糟糕的时光。现代硬件以及JVM的优化代码是如此之复杂,即使JVM性能工程师本身也记录在案,以至于他们只能查看代码然后猜测是否可以通过尝试替换新代码这样的廉价技巧使其速度更快,这非常困难。除以一位移位。

解决方案是永远不要从事这种事情:如果您有性能需求,请写下来,然后使用探查器找出要查找的位置(因为通常99%的CPU资源花费在1%或更少的资源上代码–因此,在开始性能测试之前,您需要知道what进行测量)。

一旦知道,请使用JMH实际测试性能。这就是它的用途。

IF JMH告诉您,移位速度更快(我对此表示高度怀疑),知道此结果不一定会转化为其他CPU架构。


0
投票

我对一些简单测试的观察表明,是的,这有所作为。不,我没有使用JMH,所以我知道我会退后一步。但是,无论测试顺序如何,始终观察到按位运算会更快。我不能说是否更快等同于优势,但除非得到证明,否则我将在可能的情况下继续青睐它们。

  • [(i&1) == 1快于i%2 == 1] >>
  • [i>>3快于i/8] >>
  • 而且我以前在API代码中已经看到了这一点,据记录它速度更快,但我没有尝试过。

    • a<<6 + a<<5 + a<<2 vs a*100

    然后是用于移位的。

    Arithemetic Benchmark

© www.soinside.com 2019 - 2024. All rights reserved.