首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >快速Java优化问题

快速Java优化问题
EN

Stack Overflow用户
提问于 2009-10-03 21:54:47
回答 3查看 3.8K关注 0票数 9

Eclipse编译器会自动将乘法的2次方转换为位移位吗?还是应该手动执行?谢谢你的帮助。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-10-03 22:09:15

简短的回答是:不。源代码编译器不会用位移位替换乘以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编译器生成的汇编代码的转储是非常有益的。

票数 36
EN

Stack Overflow用户

发布于 2009-10-03 21:57:24

除非你确切地知道你在做什么,否则不要怀疑现代的java编译器。这不仅适用于你所问的简单的数学,也适用于所有的事情。例如:类似于流控制。

比我们聪明的人已经投入了大量的精力来使这一切变得超级快。

票数 9
EN

Stack Overflow用户

发布于 2009-10-04 12:01:37

通常,您无法智胜JVM,除非您知道有一些非常高级别的东西无法自动推断出来。这通常意味着有比当前使用的算法更好的算法,而不是必须手动调整您的源代码。您可以使用最新的Java6JDK中提供的jvisualvm分析器来调查您的程序并查看瓶颈所在。

例如,创建新对象而不是重用旧对象的费用在过去10年里已经大幅减少,所以你不应该在没有检查它是否仍然有效的情况下采用任何旧的建议来调整你的java程序。

然而,你会发现保持你的程序简单并且最重要的是可读性,这将使你和未来的程序员更容易维护。任何不必要的复杂性都会让你的未来读者感到困惑,你需要在评论中说明为什么它必须是这样的(否则他们只会把它重构回原来的形式:)

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1514949

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档