How does the modulus operator in java function?

旧巷老猫 提交于 2019-12-14 04:14:11

问题


I'm about to start optimizations on an enormous piece of code and I need to know exactly which operations are performed when the modulus operator is used. I have been searching for quite a while, but I can't find anything about the machine code behind it. Any ideas?


回答1:


If you need to know

exactly which operations are performed when the modulus operator is used

then I would suggest you are "doing it wrong".

Modulus may be different depending on OS and underlying architecture. It may vary or it may not, but if you need to rely on the implementation, it is likely that your time could best be spent elsewhere. The implementation is not guaranteed to stay the same, or to be consistent across different machines.

Why do you believe modulus to be a major source of computation? Regardless of its implementation, the operation is very likely to be a constant - i.e, if it is operating within an algorithm which has big-O greater than constant time, optimize the algorithm first.

Ask yourself why you need to optimize. Is the computation taking (significantly) longer than expected?

Then ask yourself where 90 - 99% of the computation is being spent. Try using a profiler to get numbers, even if you think you know where time is being spent. It may give you a clue or shed light on a bug.




回答2:


The modulus operator on integers is built in on most platforms. An instruction with the timing comparable to that of division is performed, producing the modulus.

The compiler can perform an optimization for divisors that are powers of two: instead of performing modulos of, say, x % 512, the compiler can use a potentially faster x & 0x01FF.




回答3:


Any ideas?

Yes, don't waste your time on it. There's going to be other bits of code you can improve far more than trying to beat the compiler at it's own job



来源:https://stackoverflow.com/questions/15754323/how-does-the-modulus-operator-in-java-function

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!