快速Java优化问题

Mic*_*ens 9 java eclipse compiler-construction optimization

Eclipse编译器会自动将乘法乘以2的幂转换为位移,还是应该手动执行?谢谢您的帮助.

jar*_*bjo 35

简答:不可以.源代码编译器不会用位移代替乘法2.

答案很长:它不会,因为它无法知道位移是否比平台上的乘法更快,代码最终将运行.所以,问题应该是,如果一个特定的VM将用一个位移替换乘法,它可能会.我对此进行了一些实验以优化代码块,并且有趣的是Sun的Hotspot在这里显示不同的行为,具体取决于程序是在AMD上运行还是在Intel CPU上运行(至少在我测试的CPU上运行).在任何一种情况下,乘以2的幂乘以位移,但对于乘以2 +/- 1(3,5,7,9,15,17 ......)的乘法,Hotspot将为Intel CPU生成位移和加法或减法,同时为AMD CPU生成乘法,因为AMD CPU执行乘法的速度比Intel CPU快得多.当然可能的是,这种行为在每个供应商的不同CPU模型之间有所不同.

如果您想知道VM实际上在做什么,那么获得jdk7的调试版本并启用Hotspot编译器生成的汇编代码的转储是非常有益的.


Stu*_*son 9

除非你确切知道自己在做什么,否则不要再猜测现代java编译器. 这不仅适用于像你一样的简单数学,而是一切.例如:像流量控制一样.

人们比我们更聪明,已经付出了很多努力,使它超快速.

  • 如何询问==第二次猜测? (2认同)
  • @HJR:我阅读了原来的问题,并做出了相应的回答。因此,为什么OP选择我的答案是正确的——他试图优化,这个问题不仅仅是学术性的。其他访问者可以阅读 jarnbjo 的答案并对其进行投票(就像我一样)。我的答案绝不会减损这一点。这两个答案对未来的访客都很有价值。StackOverflow 并不要求有一个真正的答案来统治一切。 (2认同)