gpt4 book ai didi

java - 用于存储计算的未使用变量——它们是否多余,我可以删除吗?

转载 作者:行者123 更新时间:2023-12-02 05:29:03 25 4
gpt4 key购买 nike

我正在创建一个简单的“基准”程序,检查 PC 在 1 秒内可以执行多少次计算,共 3 次,然后取平均值并打印结果。

package benchmark;

public class Benchmark {
public static void main(String[] args) {
long startTime = System.currentTimeMillis();
long endTime = startTime + 1000;
long index = 0;
long index2 = 0;
long index3 = 0;
while (true) {
double x = Math.sqrt(index);
long now = System.currentTimeMillis();
if (now > endTime) {
break;
}
index++;
}
while (true) {
double y = Math.sqrt(index2);
long now2 = System.currentTimeMillis();
if (now2 > endTime) {
break;
}
while (true) {
double z = Math.sqrt(index3);
long now3 = System.currentTimeMillis();
if (now3 > endTime) {
break;
}
}
long total = (index + index2 + index3) / 3;
}
System.out.print(index + " loops per second on average.");
}
}

这里使用 x、y 和 z 变量来存储 Math.sqrt(index) 的结果,以及索引 2 和 3。

但是,该程序中根本没有调用 x、y 和 z 变量。有没有办法将它们从程序中删除?

最佳答案

变量使用堆栈上的空间,以及相对入栈操作来写入堆栈。

编译器和/或 JIT(即时编译器)可能(并且通常会)自动删除这些变量,因此如果不在第一个循环中,拥有它们或不拥有它们不会产生影响。

如果您进行微基准测试,您应该始终运行循环几次(标准似乎是 10000 次)来预热代码,然后再次重新运行它以测量实际性能。

关于java - 用于存储计算的未使用变量——它们是否多余,我可以删除吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25722761/

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