快速Java优化问题

快速Java优化问题,java,eclipse,optimization,compiler-construction,Java,Eclipse,Optimization,Compiler Construction,Eclipse编译器会自动将二次幂的乘法转换为位移位吗,还是应该手动转换?感谢您的帮助。除非您确切知道自己在做什么,否则不要再猜测现代java编译器。这不仅适用于像您这样的简单数学问题,而且适用于所有问题。例如:像流量控制 比我们聪明的人已经花了很多精力使它变得超级快速。简短的回答:不。源代码编译器不会用一个位移位来代替2的乘法 长回答:不会,因为它不知道在代码最终运行的平台上,位移位是否比乘法快。因此,问题应该是,一个特定的VM是否会用位移位取代乘法,而且它可能会。我对此进行了一点实验,以优化

Eclipse编译器会自动将二次幂的乘法转换为位移位吗,还是应该手动转换?感谢您的帮助。

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


比我们聪明的人已经花了很多精力使它变得超级快速。

简短的回答:不。源代码编译器不会用一个位移位来代替2的乘法

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


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

一般来说,您无法比JVM更聪明,除非您知道有非常高的级别无法自动推断。这通常意味着可以使用比当前使用的算法更好的算法,而不必手动调整源代码。您可以使用最新的Java6JDK中提供的jvisualvm探查器来调查您的程序,并查看瓶颈在哪里

例如,与过去10年相比,创建新对象而不是重用旧对象的费用已经大大减少,因此,如果不检查java程序是否仍然有效,就不应该接受任何关于优化java程序的旧建议


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

问==第二次猜测是怎么回事?@HRJ当它变成一个过早优化的问题时,我不明白你怎么能推断出这是一个问题“过早优化“。此外,这个问题不仅与OP的案例有关,还与StackOverflow的访客可能遇到的许多其他案例有关。@HJR:我阅读了原始问题,并相应地回答了。因此,为什么OP选择我的答案是正确的——他试图优化,这个问题不仅仅是学术性的。其他访客可以阅读jarnbjo的答案并投票表决(就像我一样)。我的答案丝毫没有减损这一点。这两个答案对未来的访问者都很有价值。StackOverflow并不要求有一个真正的答案来决定所有的问题。