Java ArrayList for循环优化

标签 java for-loop optimization arraylist

在 Dov Bulka 的 Java Performance and Scalability: Volume 1 中,作者提到使用诸如

之类的东西在 ArrayList 上循环
for (int i = 0; i < vector.size(); i++) {
    // do something that does not modify vector size...
}

实际上是一个小的优化问题,因为 vector.size() 的不断计算,因此意味着诸如

int size = vector.size();    
for (int i = 0; i < size; i++) {
    // do something that does not modify vector size...
}

实际上效率稍微高一点。由于本书是在 2000 年编写的,作者使用的是 Sun 1.2.2 JDK。

这个条件是否仍然适用于更新的 JDK?或者 Java 编译现在是否足够智能以消除这些低效问题,尽管它们可能有多么小?

编辑:我不担心代码中的这些微小优化;我只是对 JDK 的演变感到好奇。

最佳答案

检查循环字节码:

12: iload_3
13: aload_2
14: invokeinterface #4,  1            // InterfaceMethod java/util/List.size:()I
19: if_icmpge     31
22: iinc          1, 1
25: iinc          3, 1
28: goto          12

将其放入可变字节码中:

10: aload_2
11: invokeinterface #4,  1            // InterfaceMethod java/util/List.size:()I
16: istore_3
17: iconst_0
18: istore        4
20: iload         4
22: iload_3
23: if_icmpge     35
26: iinc          1, 1
29: iinc          4, 1
32: goto          20

好像它每次都调用它,所以实际上把它放在一个变量中更快,我不担心。请注意,我是字节码方面的新手,我可能完全错了。

关于Java ArrayList for循环优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40611294/

相关文章:

java - 如何使用 jersey 编写 XML MessageBodyWriter 提供程序

c - 为什么 if 循环在请求下一个输入之前迭代两次?

python - 迭代具有特定总和的列表

javascript - 在使用匈牙利算法解决非对称 AP 之前减少搜索空间

Java 线程和垃圾收集器

java - Apache-POI:单元格背景颜色不起作用

java - Cassandra 赫克托 :how to fetch column family with composite key

javascript - 通过 for 循环中的拼接从数组中删除项目

具有先前值的 Python Pandas iterrows()

JavaScript - 人们可以期待什么级别的代码优化?