gpt4 book ai didi

Java 执行时间受字符串格式影响吗?

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

我正在使用以下简单代码进行一些性能测试(总计大约一百万个整数):

final int[] array = new int[1024 * 1024];

// populate values
for (int i = 0; i < array.length; i++) {
array[i] = i % 100;
}

long start, end, sum = 0;

start = System.nanoTime();

// calculate sum
for (int i : array) {
sum += i;
}

end = System.nanoTime() - start;

System.out.println(end);

平均执行时间约为1.8ms

然后我决定更改测试结果的呈现方式。我用以下语句(格式化字符串)替换了 System.out.println(end) :

System.out.printf("Time in %dns, sum: %d\n", end, sum);

当我注意到我的平均执行时间约为2.8ms时,我感到非常惊讶。它只多了一毫秒(没什么大不了的),但另一方面它慢了大约50%。更重要的是,测试结果呈现(和格式)位于进行结束时间测量之后,因此理论上它不应该影响平均执行时间。

你知道为什么添加System.out.printf语句后平均执行时间需要更多时间吗?是否是由于重新排序(在为 end 变量赋值之前执行的格式化)引起的?

最佳答案

我认为你不能由此得出任何结论。基本上,您的基准是有缺陷的:

  1. 在捕获测量结果之前,它不会采取必要的步骤来预热 JVM。

  2. 执行您正在测量的“工作”的循环可以进行优化。编译器(javac 或 JIT 编译器)可以推断出 sum 从未使用过,因此不会计算它。

这些缺陷中的任何一个都可能会扭曲您所看到的结果。

<小时/>

无论如何,如果基准编写正确,那么花哨的格式根本不会对测量时间产生影响。

关于Java 执行时间受字符串格式影响吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26561818/

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