在下面的代码和结果中,我们可以看到“Traverse2”比“Traverse1”快得多,实际上它们只遍历了相同数量的元素。
1.这种差异是如何发生的?
2.将更长的迭代放在更短的迭代中会有更好的性能吗?
结果将是:
4888285195629
4888285846760
4888285914219
这意味着,如果我们在内部进行更长的迭代,性能会更好。而且似乎与缓存命中理论存在一些冲突。
1.这种差异是如何发生的?
2.将更长的迭代放在更短的迭代中会有更好的性能吗?
public class TraverseTest {
public static void main(String[] args)
{
int a[][] = new int[100][10];
System.out.println(System.currentTimeMillis());
//Traverse1
for(int i = 0; i < 100; i++)
{
for(int j = 0; j < 10; j++)
a[i][j] = 1;
}
System.out.println(System.currentTimeMillis());
//Traverse2
for(int i = 0; i < 10; i++)
{
for(int j = 0; j < 100; j++)
a[j][i] = 2;
}
System.out.println(System.currentTimeMillis());
}
}
结果:
1347116569345
1347116569360
1347116569360
如果我改变它
System.out.println(System.nanoTime());
结果将是:
4888285195629
4888285846760
4888285914219
这意味着,如果我们在内部进行更长的迭代,性能会更好。而且似乎与缓存命中理论存在一些冲突。