Java 求整数和数组中每个元素之和的快速方法
我想优化下面非常简单的代码, 你知道吗Java 求整数和数组中每个元素之和的快速方法,java,performance,Java,Performance,我想优化下面非常简单的代码, 你知道吗 public void addValueToTab(int _valueToAdd){ for(int k=0; k < myArray.length; k++){ myArray[k]+= _valueToAdd; } } public void addValueToTab(int\u valueToAdd){ for(int k=0;k
public void addValueToTab(int _valueToAdd){
for(int k=0; k < myArray.length; k++){
myArray[k]+= _valueToAdd;
}
}
public void addValueToTab(int\u valueToAdd){
for(int k=0;k
myArray是一个int[]
myArray的长度可以在50到1000之间变化
非常感谢您的帮助,我敢打赌,使用服务器JVM和热代码,您无法提高速度(因为JVM已经完成了所有优化)。特别是,
myArray.length
缓存在局部变量中,循环被展开数次
如果您关心较弱的JIT编译器的性能,您可以手动完成上面两件事情,但是为什么您要关心呢
旁注
有趣的是,有一个类似的循环,其中JVM非常疯狂:
for (int i = 0; i < value.length; i++) {
h = 31 * h + val[i];
}
for(int i=0;i
它不是一段不重要的代码,而是
String.hashCode
的主体。通过手动展开,您可以获得因子2+的加速。这段代码似乎已经是最快的方式了。循环展开。倒计时而不是倒计时(针对0的测试比针对其他值的测试快)。除此之外,你还面临着语言的限制。重要问题:您是否分析了您的代码,并确定您在这几行代码上花费了足够的时间来证明关注它们而不是更高级别的算法是合理的?@keshlam我已经测试过了。JIT只对最简单的循环进行矢量化,它确实是最快的选项。我一直忘了矢量化现在是一个因素。这再次强调了微观优化通常是错误的起点,任何源代码级优化都需要使用适当的分析工具进行指导和检查。感谢您在这方面的帮助。