以下のコードと結果では、「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
これは、より長いインターレーションを内部に配置すると、パフォーマンスが向上することを意味します。また、キャッシュヒット理論とは矛盾しているようです。