gpt4 book ai didi

java - 多次迭代列表的性能成本是多少

转载 作者:行者123 更新时间:2023-11-30 06:50:27 25 4
gpt4 key购买 nike

我有一个列表,我需要遍历并在此过程中执行工作。我的问题是,对于我的程序,由于并发性,很难在每个循环中完成列表中所需的所有工作。我的解决方案是根据需要多次迭代循环,并在每次迭代中完成部分工作。这个例子应该说明我的意思:

List<String> list = new ArrayList<>();
list.add("A");
list.add("B");
list.add("C");
list.add("D");

// Method A
for (String item : list) {
doWorkThing1(item);
doWorkThing2(item);
}

// Method B
for (String item : list) {
doWorkThing1(item);
}
for (String item : list) {
doWorkThing2(item);
}

方法B是我很好奇的。多次迭代循环是否有显着的成本?由于我假设大部分性能成本将花在“工作”方法上,我想知道说方法 A 和方法 B 之间的差异可以忽略不计是否公平?

最佳答案

性能差异可能是可测量的,但在您的示例中,它小于一微秒。我的直觉是在 100 纳秒的范围内......一旦代码被 JIT 编译。

有可能,但不太可能该大小的性能差异显着。要使差异显着,您需要满足以下一项或多项条件:

  • 这些方法被调用了很多很多次。
  • 应用程序有硬实时要求;例如对其中一种方法的调用必须在非常短的时间窗口内完成。

即使满足其中一个条件,如果完成工作所花费的时间是微秒、毫秒或更长,那么完成工作的时间将支配“浪费”在第二次迭代。


这是我的建议。

  1. 在您开始思考优化之前,请清楚地了解性能要求。如果没有明示或暗示的性能要求,那么不要浪费您的时间在优化上。 (没有道德义务让你的代码尽可能快。)

  2. 得到正确(足够)的答案比快速得到答案更重要。因此,在编写和测试代码之前不要花时间进行优化。

  3. 为自己建立一个基准(使用真实的输入数据等),您可以用它来判断代码运行速度是否足够快,并对候选优化进行前后比较。 (在对 Java 代码进行基准测试时要小心标准陷阱。)

  4. 使用分析来确定代码中值得优化的部分。寻找热点;即花费大部分时间的方法/部分。 (优化非热点代码不太可能整体应用程序性能产生重大影响。)

  5. 当您达到目标或热点用完时...停止

关于java - 多次迭代列表的性能成本是多少,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41370996/

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