gpt4 book ai didi

Java ArrayList for循环优化

转载 作者:行者123 更新时间:2023-12-03 17:09:44 24 4
gpt4 key购买 nike

在 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com