快速Java优化问题 [英] Quick Java Optimization Question

查看:100
本文介绍了快速Java优化问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

Will the Eclipse compiler automatically convert multiplication by a power of two into a bit shift, or should I do that manually? Thanks for the help.

推荐答案

简短的答案:不。源代码编译器不会将一个乘法shift。

Short answer: No. The source code compiler won't replace a multiplication by two with a bit shift.

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

Long answer: It won't, because it can't know if a bit shift is faster than a multiplication on the platform the code eventually will be running. So, the question should rather be if a specific VM will replace the multiplication with a bit shift, and it probably will. I experimented a little bit with this to optimize a code block and it's interesting that Sun's Hotspot shows different behaviour here, depending on if the program runs on an AMD or on an Intel CPU (at least with the CPUs I tested). In either case, a multiplication with a power of two is replaced with a bit shift, but for multiplications with a power of two +/- 1 (3, 5, 7, 9, 15, 17, ...), Hotspot will generate a bit shift and an addition or a subtraction for Intel CPUs, while generating a multiplication for AMD CPUs, since the AMD CPU executes a multiplication much faster than the Intel CPU. It's of course possible, that this behaviour differs between different CPU models from each vendor.

如果你有兴趣知道VM实际上在做什么,获取jdk7的调试版本,并启用由Hotspot编译器生成的汇编代码转储。

If you are interested in knowing what the VM actually is doing, it is quite benefical to get the debug build of jdk7 and enable dumps of the assembler code generated by the Hotspot compiler.

这篇关于快速Java优化问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆