gpt4 book ai didi

java - 为什么第一个电话这么长?

转载 作者:行者123 更新时间:2023-11-30 06:48:32 26 4
gpt4 key购买 nike

我发现某些功能的第一次调用需要很长时间。这是我的简单测试:

public class MainTest {
public static void main(String[] args) {
long k = 0;
for (int i = 0; i < 10; i++) {
long start = System.nanoTime();
k += doWork(i);
System.out.println(System.nanoTime() - start);
}
System.out.println(k);
}

public static long doWork(long var) {
for (int i = 0; i < 100000; i++) {
var += i;
}
return var;
}
}

结果:

820521
283961
292514
259442
88952
86100
82965
81539
74126
29651

你能给我一些关于为什么会发生的版本吗?或者我可以找到答案的一些资源。它可以与JIT连接,但我不确定。

我知道 nanotime 不适合测试。我试试 JMH:

# Warmup Iteration   1: 179791124,395 ops/s
# Warmup Iteration 2: 183962412,435 ops/s
# Warmup Iteration 3: 284320650,805 ops/s

最佳答案

这里有两个方面:

  • 您的基准基本上是有缺陷和搞砸了。你想读 this .
  • 是的,JIT 需要一个 warm up

简单地说:在运行时,JIT 会观察您的代码在做什么。它应用触发优化调用的启发式。因此:不要期望确定性行为。 很难获得真正有意义的数字。

为了获得更可靠的结果,您必须显着提高“测量”过程的质量。

关于java - 为什么第一个电话这么长?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44154184/

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