【发布时间】:2020-03-19 19:19:21
【问题描述】:
对我当前的应用程序进行一些分析,顶部分配是对 Stream.empty() 的过度调用,这反过来又分配了一个 new ReferencePipeline.Head<> 导致大量虚假对象。
这让我想到,Stream.empty() 为什么不简单地返回一个特殊的可重用单例流,而不是每次都分配新的流?
这是个好主意吗?如果是这样,是否有任何库/示例已经这样做了?
【问题讨论】:
-
如果这是一个非常好的想法,它可能会被实施。 JDK 中有
Collections.emptyXXX()等,所以它肯定在JDK 开发人员的工具箱中。缺乏不变性可能会阻止该方法与流一起使用。但是我(傲慢地)质疑这是否是一个实际问题。如果Stream.empty()是内存热点,您的应用程序会做什么? -
嗯,Collections.empty 正是让我想到的。
-
请注意,
flatMap允许返回null以表示空流。这可以防止过多创建空流实例。在flatMap之外,这几乎不是问题。
标签: java performance java-stream