在下面的代码和结果中,我们可以看到“Traverse2”比“Traverse1”快得多,实际上它们只是遍历相同数量的元素。
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
这意味着如果我们在里面放更长的interaction会有更好的性能。而且它似乎与缓存命中理论有一些冲突。