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

我們都知道,ArrayListHashSetHashMapConcurrentHashMap在新建時會初始化空間,當空間不足時會擴容,在大數據量不斷新增,那麼會發生多次擴容,通常在stream流式處理時都是知道原input的大小,那麼我們就可以根據這個大小預估初始化的集合空間,避免擴容佔用佔用內存和觸發垃圾回收

三、解決方法

上面還有第5方法,toCollection,我們可以

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

原文地址

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章