0
点赞
收藏
分享

微信扫一扫

stream的collectors优化

一、背景

在​​JDK8​​​之后,我们经常会使用​​stream​​​进行数据流式处理,使得​​Java​​​具备了分组统计、流式处理的能力,但是在一些使用方面的细节需要注意,否则在大数据量流水处理时,会影响到性能,引发​​OOM​

二、Collectors的优化

​collectors​​提供了基础的集合收集能力,常见的有:

  1. ​toList​
  2. ​toSet​
  3. ​toMap​
  4. ​toConcurrentMap​
  5. ​toCollection​

查看1~4的源码,发现初始化的集合类为

  1. ​toList​​​ ->​​ArrayList::new​
  2. ​toSet​​​ ->​​HashSet::new​
  3. ​toMap​​​ ->​​HashMap::new​
  4. ​toConcurrentMap​​​ ->​​ConcurrentHashMap::new​

我们都知道,​​ArrayList​​​、​​HashSet​​​、​​HashMap​​​、​​ConcurrentHashMap​​​在新建时会初始化空间,当空间不足时会扩容,在大数据量不断新增,那么会发生多次扩容,通常在​​stream​​​流式处理时都是知道原​​input​​的大小,那么我们就可以根据这个大小预估初始化的集合空间,避免扩容占用占用内存和触发垃圾回收

三、解决方法

上面还有第5方法,​​toCollection​​,我们可以

​Collectors.toCollection(() -> Lists.newArrayListWithCapacity(100))​

​​原文地址​​

举报

相关推荐

0 条评论