cpu cache结构
内存>L3>L2>L1多级缓存 这四级的速度是越来越快
本质上内存是一个大的一维数组二维数组在内存中按照行排列,先放a【0】再放a【1】
第一种arr1的遍历方式是行遍历先遍历完第一行再遍历第二行符合局部性原理 catchhit命中率高
第二种arr2的遍历方式是列遍历,先遍历第一列后遍历第二列由于下一列和上一列的数组元素在内存中并不是连续很可能会造成catch miss cpu需要从内存中载入数据速度不如cpu L1 主存100ns L1 0.5ns
import java.util.Date;
/**
* Created by lwj32 on 2020/11/2.
*局部性原理
* arr1() = 563
* arr2() = 3846
*/
public class ArrayTimeCompare {
public static void main(String[] args) {
System.out.println("arr1() = " + arr1());
System.out.println("arr2() = " + arr2());
}
public static long arr1(){
Date date = new Date();
long time = date.getTime();
long [][] a = new long[10000][10000];
for(int i = 0;i<a.length;i++){
for (int j= 0;j<a[i].length;j++){
a[i][j] = j;
}
}
Date date1 = new Date();
long time2 = date1.getTime();
long timemax = time2 -time;
return timemax;
}
public static long arr2(){
Date date = new Date();
long time = date.getTime();
long [][] a = new long[10000][10000];
for(int i = 0;i<a.length;i++){
for (int j= 0;j<a[i].length;j++){
a[j][i] = j;
}
}
Date date1 = new Date();
long time2 = date1.getTime();
long timemax = time2 -time;
return timemax;
}
}