当前位置:  开发笔记 > 编程语言 > 正文

现代for循环的原始数组

如何解决《现代for循环的原始数组》经验,为你挑选了1个好方法。

原始数组上的for循环之间是否存在性能差异?

假设:

double[] doubleArray = new double[300000];


for (double var: doubleArray) 
   someComplexCalculation(var);

要么 :

for ( int i = 0, y = doubleArray.length; i < y; i++)
   someComplexCalculation(doubleArray[i]);

测试结果

我实际上描述了它:

Total timeused for modern loop= 13269ms
Total timeused for old loop   = 15370ms

所以现代循环实际上运行得更快,至少在我的Mac OSX JVM 1.5上.



1> Bill K..:

我的意见是你不知道也不应该猜.这些天试图超越编译器是徒劳的.

有些人曾经学过"模式"似乎可以优化某些操作,但在下一版本的Java中,这些模式实际上更慢.

始终尽可能清楚地写出来并且不要担心优化,直到你手中有一些用户规范并且无法满足某些要求,甚至在测试之前和之后要非常小心地运行以确保你的"修复"实际上改进了它,足以使该要求通过.

编译器可以做一些令人惊奇的东西,这些东西真的会让你大吃一惊,即使你做了一些迭代超过一个大范围的测试,如果你有一个较小的范围或改变循环内部发生的事情,它可能会完全不同.

及时编译意味着它偶尔可以胜过C,并且在某些情况下它没有理由不能胜过静态汇编语言(汇编不能事先确定不需要调用,Java有时可以做到这一点.

总结一下:你可以在代码中加入的最大价值就是把它写成可读的.

推荐阅读
mobiledu2402851203
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有