java中Arrays.parallelSort和Arrays.sort性能对比

Arrays.parallelSort

java8新增的并行排序算法,基于fork/join框架。

Arrays.sort

为串行排序

现在对这两个算法针对不同的数据规模进行性能对比,先上结果后附代码

//先让数据规模按2的指数幂递增
limit:2  parallelSort: 0ms  serialSort: 0ms
limit:4  parallelSort: 0ms  serialSort: 0ms
limit:8  parallelSort: 0ms  serialSort: 0ms
limit:16     parallelSort: 0ms  serialSort: 0ms
limit:32     parallelSort: 0ms  serialSort: 0ms
limit:64     parallelSort: 0ms  serialSort: 0ms
limit:128    parallelSort: 0ms  serialSort: 0ms
limit:256    parallelSort: 0ms  serialSort: 0ms
limit:512    parallelSort: 0ms  serialSort: 0ms
limit:1024   parallelSort: 0ms  serialSort: 0ms
limit:2048   parallelSort: 0ms  serialSort: 1ms
limit:4096   parallelSort: 0ms  serialSort: 1ms
limit:8192   parallelSort: 1ms  serialSort: 1ms
limit:16384  parallelSort: 7ms  serialSort: 1ms
limit:32768  parallelSort: 8ms  serialSort: 4ms
limit:65536  parallelSort: 16ms serialSort: 8ms
limit:131072     parallelSort: 17ms serialSort: 9ms
limit:262144     parallelSort: 5ms  serialSort: 20ms//转折点
limit:524288     parallelSort: 10ms serialSort: 42ms
limit:1048576    parallelSort: 20ms serialSort: 92ms
limit:2097152    parallelSort: 41ms serialSort: 241ms
limit:4194304    parallelSort: 98ms serialSort: 484ms
limit:8388608    parallelSort: 178ms    serialSort: 783ms
limit:16777216   parallelSort: 371ms    serialSort: 1712ms
limit:33554432   parallelSort: 770ms    serialSort: 3470ms
limit:67108864   parallelSort: 1772ms   serialSort: 8073ms
//然后按10的指数幂递增
limit:10     parallelSort: 0ms  serialSort: 0ms
limit:100    parallelSort: 0ms  serialSort: 0ms
limit:1000   parallelSort: 0ms  serialSort: 1ms
limit:10000  parallelSort: 5ms  serialSort: 1ms
limit:100000     parallelSort: 23ms serialSort: 11ms
limit:1000000    parallelSort: 34ms serialSort: 83ms//转折点
limit:10000000   parallelSort: 216ms    serialSort: 1048ms
limit:100000000  parallelSort: 2466ms   serialSort: 11992ms

从上面的结果,可以看出当数据规模达到262144(即2的18次方)时,并行排序的性能要超过串行排序。

测试代码

public class Test {
    public static void main(String[] args){
        for(int i=10;i10)
            test(i);

    }
    static void test(long limit){
        Random rand = new Random();
        IntStream stream = rand.ints(limit);
        int[] arr = stream.toArray();
        int[] arr1 = Arrays.copyOf(arr, arr.length);

        long t1 = System.currentTimeMillis();
        Arrays.parallelSort(arr);
        long t2 = System.currentTimeMillis();
        Arrays.sort(arr1);
        long t3 = System.currentTimeMillis();
        System.out.println("limit:"+limit+"\t parallelSort: "+(t2-t1)+"ms\tserialSort: "+(t3-t2)+"ms");
    }
}

测试机参数
CPU:i7-3630QM 8核*2.4G

你可能感兴趣的:(算法,java,java,性能,排序算法)