Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java n>>3或n&3是否分别比n/8或n%8有任何优势?_Java_Real Time - Fatal编程技术网

Java n>>3或n&3是否分别比n/8或n%8有任何优势?

Java n>>3或n&3是否分别比n/8或n%8有任何优势?,java,real-time,Java,Real Time,在我的程序中,内存和cpu时间是有限的,而且这种计算每秒大约要进行50000次。如果在算术上使用位运算符,会有性能提升吗 这不太可能产生任何影响;CPU几十年来都不会关心这种事情 总的来说,如果你在没有任何实际迹象表明性能低于你的需要之前就担心性能,那么你将度过一段糟糕的时光。现代硬件,JVM的优化代码极其复杂,甚至JVM性能工程师自己也有记录,他们很难仅仅查看代码,然后猜测是否可以用廉价的技巧(如尝试用位移位代替除法)使其更快 解决方案就是永远不要参与这类事情:如果您有性能需求,写下来,并使用

在我的程序中,内存和cpu时间是有限的,而且这种计算每秒大约要进行50000次。如果在算术上使用位运算符,会有性能提升吗

这不太可能产生任何影响;CPU几十年来都不会关心这种事情

总的来说,如果你在没有任何实际迹象表明性能低于你的需要之前就担心性能,那么你将度过一段糟糕的时光。现代硬件,JVM的优化代码极其复杂,甚至JVM性能工程师自己也有记录,他们很难仅仅查看代码,然后猜测是否可以用廉价的技巧(如尝试用位移位代替除法)使其更快

解决方案就是永远不要参与这类事情:如果您有性能需求,写下来,并使用探查器找出应该查找的位置,因为通常99%的CPU资源用于1%或更少的代码——因此在开始性能测量之前,您需要知道要测量什么

一旦您知道了,就可以使用它来实际测试性能。这就是为什么


如果JMH告诉您位移位速度更快,我对此表示高度怀疑,要知道这一结果不一定会转化为其他CPU体系结构。

它不太可能产生任何影响;CPU几十年来都不会关心这种事情

总的来说,如果你在没有任何实际迹象表明性能低于你的需要之前就担心性能,那么你将度过一段糟糕的时光。现代硬件,JVM的优化代码极其复杂,甚至JVM性能工程师自己也有记录,他们很难仅仅查看代码,然后猜测是否可以用廉价的技巧(如尝试用位移位代替除法)使其更快

解决方案就是永远不要参与这类事情:如果您有性能需求,写下来,并使用探查器找出应该查找的位置,因为通常99%的CPU资源用于1%或更少的代码——因此在开始性能测量之前,您需要知道要测量什么

一旦您知道了,就可以使用它来实际测试性能。这就是为什么


如果JMH告诉您位移位更快,我对此表示高度怀疑,但要知道这一结果并不一定会转化为其他CPU体系结构。

我对进行一些简单测试的观察结果表明,是的,这会有所不同。不,我没有用JMH,所以我知道我会得到一些回击。但是,不管测试的顺序如何,按位操作总是更快。我不能说速度是否等同于优势,但除非证明速度等同于优势,否则我会尽可能继续支持他们

i&1==1比i%2==1快 i> >3比i/8快 我以前在API代码中看到过这一点,有文件证明它更快,但我没有尝试过


a我对做一些简单测试的观察结果表明,是的,这会有所不同。不,我没有用JMH,所以我知道我会得到一些回击。但是,不管测试的顺序如何,按位操作总是更快。我不能说速度是否等同于优势,但除非证明速度等同于优势,否则我会尽可能继续支持他们

i&1==1比i%2==1快 i> >3比i/8快 我以前在API代码中看到过这一点,有文件证明它更快,但我没有尝试过


a@ElliottFrisch他们的表现是一样的,是吗?你有参考基准吗?值得注意的是,它们不会产生相同的结果。而且50000赫兹也不是很多,至少在一些嵌入式系统之外。我的建议是选择看起来最自然、最正确的版本!,并让JIT编译器的优化器选择更快的版本。请注意,最佳代码可能依赖于硬件。我知道这是一个典型的声明,但它太重要了,不能每次都发布:编写可读代码。不要过早地进行优化,最终可能会产生较慢的代码并牺牲可读性。衡量你的表现,只有当你在那一点上发现了一个真正的问题,然后进行优化,然后用另一个衡量来确认你没有让它变得更糟。@ElliottFrisch它是带符号的余数和带符号的除法,即使进行了优化,它们最终也比按位和移位更复杂。所以你基本上是说AND指令和AND指令加上一些额外的指令之间几乎没有区别。差异很小,足以使准确的基准变得棘手,但现在移动球门柱已经太迟了。@ElliottFrisch他们的表现完全相同,是吗?你有关于长凳的参考资料吗
嗯,是这样吗?也许值得注意的是,它们不会产生相同的结果。而且50000赫兹也不是很多,至少在一些嵌入式系统之外。我的建议是选择看起来最自然、最正确的版本!,并让JIT编译器的优化器选择更快的版本。请注意,最佳代码可能依赖于硬件。我知道这是一个典型的声明,但它太重要了,不能每次都发布:编写可读代码。不要过早地进行优化,最终可能会产生较慢的代码并牺牲可读性。衡量你的表现,只有当你在那一点上发现了一个真正的问题,然后进行优化,然后用另一个衡量来确认你没有让它变得更糟。@ElliottFrisch它是带符号的余数和带符号的除法,即使进行了优化,它们最终也比按位和移位更复杂。所以你基本上是说AND指令和AND指令加上一些额外的指令之间几乎没有区别。差异很小,足以让准确的基准变得棘手,但现在移动球门柱已经太迟了。