gpt4 book ai didi

java - 在 java 中减少数组访问时间而不检查数组边界

转载 作者:行者123 更新时间:2023-11-29 05:58:08 25 4
gpt4 key购买 nike

好的。我错误地计算了微基准测试的事情。如果你没有多余的时间,请不要阅读。

代替

double[] my_array=new array[1000000];double blabla=0;
for(int i=0;i<1000000;i++)
{
my_array[i]=Math.sqrt(i);//init
}

for(int i=0;i<1000000;i++)
{
blabla+=my_array[i];//array access time is 3.7ms per 1M operation
}

我用过

public final static class my_class
{
public static double element=0;
my_class(double elementz)
{
element=elementz;
}
}

my_class[] class_z=new my_class[1000000];
for(int i=0;i<1000000;i++)
{
class_z[i]=new my_class(Math.sqrt(i)); //instantiating array elements for later use(random-access)
}

double blabla=0;

for(int i=0;i<1000000;i++)
{
blabla+=class_z[i].element; // array access time 2.7 ms per 1M operations.
}
}

每 1M 循环迭代的循环开销接近 0.5 毫秒(使用此偏移量)。

类数组的元素访问时间比原始数组少 %25。问题:你知道还有什么其他方法可以降低随机访问时间吗?intel 2Ghz 单核 java -eclipse

最佳答案

再次查看您的代码,我可以看到在第一个循环中您添加了 1m 个不同的元素。在第二个示例中,您添加了相同的 static 元素 1m 次。


微基准测试的一个常见问题是执行测试的顺序会影响结果。

例如,如果您有两个循环,则第一个循环最初不会编译为 native 代码。然而,一段时间后,整个方法将被编译并且循环将运行得更快。

然后你运行第二个循环,发现它要么是

  • 快得多,因为它从一开始就进行了优化。 (对于简单循环)
  • 慢得多,因为它在没有任何运行时指标的情况下进行了优化。 (对于复杂循环)

您需要将每个循环放在一个单独的方法中,并交替运行测试多次以获得可重现的结果。


在第一种情况下,循环在运行一段时间后才进行优化。在第二种情况下,您的循环可能在开始时已经编译。

关于java - 在 java 中减少数组访问时间而不检查数组边界,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11247791/

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