Java 具有二次幂的变量值会产生多大的性能差异?
或者,对于包括移动设备在内的现代CPU来说,这种差异是否无关紧要?假设你有一百万个左右的变量。这可能没什么区别 在典型的处理器上,算术指令占用相同的时间,与值无关。。。模硬件异常。(如果类型不同,可能需要不同的时间,但这是另一回事。) 两个值的幂更快的唯一可能的情况是,所讨论的值是常数,并且您正在进行整数乘法或除法运算。在这种情况下,JIT编译器可能会将乘法或除法操作转换为移位操作。然而,这只会发生在(JIT)编译时常量中Java 具有二次幂的变量值会产生多大的性能差异?,java,performance,optimization,Java,Performance,Optimization,或者,对于包括移动设备在内的现代CPU来说,这种差异是否无关紧要?假设你有一百万个左右的变量。这可能没什么区别 在典型的处理器上,算术指令占用相同的时间,与值无关。。。模硬件异常。(如果类型不同,可能需要不同的时间,但这是另一回事。) 两个值的幂更快的唯一可能的情况是,所讨论的值是常数,并且您正在进行整数乘法或除法运算。在这种情况下,JIT编译器可能会将乘法或除法操作转换为移位操作。然而,这只会发生在(JIT)编译时常量中 (JIT是否真正做到这一点取决于相对指令时间和JIT优化器的复杂程度。)
(JIT是否真正做到这一点取决于相对指令时间和JIT优化器的复杂程度。)这在很大程度上取决于您的代码。JIT很可能会删除您的大部分想法。请澄清:您是在问是否应该预计算功率值并将其存储在列表中;vs.“总是”计算它们?@Jägermeister——我想他是在问,对数字
8
进行任何数学运算是否会比对9
进行同样的运算快。这很难区分,而且可能因操作而异。机器不是按位运行的。它们按每个登记册运作。因此,2个整数加法运算将花费相同的时间,无论它们是否为2的幂。这一切都是关于打开/关闭晶体管的。正如其他人提到的,JIT可能会优化代码,以防其中一个操作数的幂为2,而您正在进行乘法或除法运算