【问题标题】:Explicitly substitute modulo operation by bitwise?按位显式替换模运算?
【发布时间】:2019-03-26 17:28:47
【问题描述】:

据我所知,取模% 是一个非常昂贵的操作,由下面的除法操作支持,是 CPU 中最慢的操作。

是否值得用代码中的按位模拟number & (divisor - 1) 显式替换此操作,或者JIT 可以为我们隐式执行此操作?

【问题讨论】:

  • 不用担心这些低级优化。在 99.9% 的情况下,它们不会产生明显的差异。在 0.1% 的情况下(例如算法交易)——首先我会质疑你首先选择使用 Java 的选择——如果你正在开发这样的应用程序,那么你可能不会提出这个问题。专注于编写易于阅读和维护的代码。
  • 运行一些测试,看看你得到了什么。
  • 您询问的是性能还是一般情况?
  • @talex 性能原因,代码可读性是我在这里最不感兴趣的事情
  • 缺少一些东西:17 % 5 == 217 & (5-1) == 0

标签: java performance jit


【解决方案1】:

据我所知JIT 没有优化这样的表达式:

number%divisor 并不比number & (divisor - 1) 快(慢或相同的速度),如果divisor 是常数(所以divisor - 1 可以在编译时计算)。

很难说会有多大差异,因为在现代 CPU 中,它取决于周围的代码、缓存状态和许多其他因素。

PS:请记住,只有当divisor2 的幂时,优化才会起作用。

【讨论】:

    猜你喜欢
    • 2015-11-11
    • 1970-01-01
    • 1970-01-01
    • 2011-05-08
    • 2012-09-14
    • 2012-03-13
    • 1970-01-01
    • 2021-12-20
    • 1970-01-01
    相关资源
    最近更新 更多