数据空间局部性带来的效率差异测试

通过二维数组的访问方式来测试数据的空间局部性带来的效率差异性,代码如下:

static void test1(){
        int[][] data = new int[10000][10000];
        int temp=1;
        long start = System.currentTimeMillis();
        for(int i=0;i<10000;i++){
            for(int j=0;j<10000;j++){
                temp=data[i][j];
            }
        }
        long end = System.currentTimeMillis();
        System.out.println(end-start);
    }

    
    static void test2(){
        int[][] data = new int[10000][10000];
        int temp=1;
        long start = System.currentTimeMillis();
        for(int i=0;i<10000;i++){
            for(int j=0;j<10000;j++){
                temp=data[j][i];
            }
        }
        long end = System.currentTimeMillis();
        System.out.println(end-start);
    }

第一种方式比第二种方法的效率要高30倍左右,本人测试机器是i5-4210H处理器,具有良好空间局部性的程序会非常高效。一般而言数组比链表具有良好的空间局部性,比如前缀树通过双数组trie实现会比普通的trie树高效很多。

猜你喜欢

转载自my.oschina.net/u/1268334/blog/2396212