Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在数组上调用.length与保存size变量在性能上是否存在差异?_Java_Arrays_Performance - Fatal编程技术网

Java 在数组上调用.length与保存size变量在性能上是否存在差异?

Java 在数组上调用.length与保存size变量在性能上是否存在差异?,java,arrays,performance,Java,Arrays,Performance,我正在创建一个模拟程序,我希望代码得到非常优化。现在我有一个数组,可以循环很多次,在我使用的各种for循环中循环 for(int i = 0; i<array.length; i++){ //do stuff with the array } for(int i=0;i访问数组上的length属性是最快的 您将看到有人建议您在进入循环之前保存一个数据结构大小,因为它意味着每次迭代都有一个方法 但这是一种很少有意义的微观优化。在有数据表明这是性能问题的原因之前,不要太担心

我正在创建一个模拟程序,我希望代码得到非常优化。现在我有一个数组,可以循环很多次,在我使用的各种for循环中循环

 for(int i = 0; i<array.length; i++){
       //do stuff with the array
 }

for(int i=0;i访问数组上的length属性是最快的

您将看到有人建议您在进入循环之前保存一个数据结构大小,因为它意味着每次迭代都有一个方法

但这是一种很少有意义的微观优化。在有数据表明这是性能问题的原因之前,不要太担心这类事情


你应该花更多的时间考虑你在循环中嵌入的算法,可能的并行性,等等。这对你寻求优化的解决方案更有意义。

这真的没关系,当你用[#]创建一个数组时,它存储那个数,然后返回那个数

如果您使用的是[]{object1,object2,object3},那么它将计算大小,在任何一种情况下,该值只计算一次并存储

length是一个变量,而不是一个方法,当您访问它时,它有一个值,它只是检索该值,而不是每次使用length属性时都要计算数组的长度。array.length并不慢,事实上,必须设置一个额外的变量实际上比仅使用length需要更多的时间


array.length速度更快,虽然只快了几分之一毫秒,但在循环中,如果循环处理1000000个项目(可能是0.1秒),则可以节省大量时间。

这不太可能有什么不同

更广泛的问题是,您希望模拟运行得尽可能快。 这显示了如何使用正在运行的程序来告诉您要优化的内容,而不是像
.length
这样的小事。 大多数最初编写的代码(小玩具程序除外)都有巨大的加速潜力,其方式可以避免被猜测

加速的最大机会通常是分散的,就像您选择的数据结构一样。 它们不局限于特定的例程,测量工具也没有指出它们。 该项目中演示的方法“随机暂停”确实可以识别它们。
您需要进行的更改可能不容易完成,但它们会带来加速。

+在循环缓存时使用hotspot会缓存结构的大小,因此如果使用.length或.size(),实际上不会影响性能@爸爸,它不会缓存它,它证明了
i
无法跨越长度,并且在展开循环时根本不会检查它,等等。