gpt4 book ai didi

java - 使用 java jdk 1.7 64 位,使用 int 的 for 循环比使用 long 的 for 循环快 20 多倍。为什么?

转载 作者:行者123 更新时间:2023-12-04 05:53:01 25 4
gpt4 key购买 nike

请参阅下面的编辑

终止检查没有进行任何转换。我认为 < 和++ 在 64 位机器上使用 int 和 long 会一样快。但我猜不是?

整数:65 毫秒:

public void testWTF() throws Exception {
int runs = 10;
long hs = 0;
long timeSum = 0;
for (int run = 0; run < runs; run++) {
int term = Integer.MAX_VALUE;
long start = System.currentTimeMillis();
// ***** loop to be tested ******
for (int i = 0; i < term; i++) {
hs++;
}
timeSum += (System.currentTimeMillis() - start);
System.out.println("hs = " + hs);
hs = 0;

}
System.out.println("timeSum = " + timeSum);
System.out.println("avg time = " + (timeSum / runs) + " for " + runs + " runs");
System.out.println("hs = " + hs);
}

长:1445 毫秒
public void testWTF() throws Exception {
int runs = 10;
long hs = 0;
long timeSum = 0;
for (int run = 0; run < runs; run++) {
long term = Integer.MAX_VALUE;
long start = System.currentTimeMillis();
// ***** loop to be tested ******
for (long i = 0; i < term; i++) {
hs++;
}
timeSum += (System.currentTimeMillis() - start);
System.out.println("hs = " + hs);
hs = 0;

}
System.out.println("timeSum = " + timeSum);
System.out.println("avg time = " + (timeSum / runs) + " for " + runs + " runs");
System.out.println("hs = " + hs);
}

硬件:64 位 Xeon 运行 Windows 7 64 位。

编辑:我更新了这个来做几次迭代。对于 int 版本的 100 万次运行,平均时间为 65 毫秒。对于 100 万次、1000 次甚至 100 次,长版本花费的时间太长。 10 次运行的平均时间为 1447 毫秒。

另外,我在循环外使用 hs 以便循环不会被抛弃。

最佳答案

这是一种非常糟糕/不可靠/不切实际的基准测试方式,因为 JIT 并没有真正有机会进行大量优化——您只运行一次基准测试,然后测量第一次运行。

基本上,一旦看到您的代码得到广泛使用,Java 的 JIT 将显着优化您的代码。在实际程序中,JIT 将优化任何关键循环,因此如果您想要模拟真实世界的基准,您必须说服 JIT 启动。

在 Java 中获得准确基准的最简单方法是使用类似 Caliper 的工具。知道如何正确预热 JIT 并获得准确的测量值,然后查看结果是否更一致。

关于java - 使用 java jdk 1.7 64 位,使用 int 的 for 循环比使用 long 的 for 循环快 20 多倍。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9845973/

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