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编译器生成的汇编代码的转储是非常有益的.
除非你确切知道自己在做什么,否则不要再猜测现代java编译器. 这不仅适用于像你一样的简单数学,而是一切.例如:像流量控制一样.
人们比我们更聪明,已经付出了很多努力,使它超快速.