快速Java优化问题

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

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

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

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

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

人们比我们更聪明地投入了大量的精力让它变得非常快。

一般情况下,除非知道无法自动推断的高级别,否则不能超越JVM。 这通常意味着可以获得比当前使用的算法更好的算法,而不是必须手工处理您的源。 您可以使用最新Java 6 JDK中提供的jvisualvm分析器来调查您的程序并查看瓶颈所在。

例如,创建新对象而不是重用旧对象的费用已经大大减少了10年,所以你不应该采用任何旧的建议来调整你的java程序而不检查它是否仍然存在。

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