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

9 篇文章 0 订阅

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;i<Integer.MAX_VALUE;i*=10)
            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

  • 12
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值