Scala中将List转换为LazyList是否存在收益?
List转LazyList是否能节省内存?
先看你给出的这段代码:
val x = Seq(1, 2, 3, 4, 5) // This is supposed to save more memory in the long term val y = x.to(LazyList)
这种情况下完全不会节省内存,你的判断是对的:
x本质是一个已经完全初始化的List,所有元素都已经加载到内存里了。- 转成
LazyList的时候,会把原List的元素逐个缓存到LazyList的结构中,而原List只要还被x引用着,就不会被垃圾回收。相当于内存里同时存了原List和新的LazyList,内存占用反而更高。
只有在以下场景,转LazyList才可能有内存收益:
- 原序列是按需生成的迭代器/动态序列,而非已经完全实例化的List。比如原序列是一个会生成百万级元素的
Iterator,转成LazyList后,元素只会在被访问的时候才生成,不用一次性把所有元素加载到内存。 - 如果能确保原List不会被其他引用持有(比如写成
val y = Seq(1,2,3,4,5).to(LazyList),原匿名List没有变量引用它),理论上原List可能被GC回收,但这种情况内存占用和原List差不多,甚至因为LazyList的额外结构开销,可能略高——除非大部分元素根本不会被访问到,这时候LazyList里没被访问的元素不会被缓存,才能省内存。
内容的提问来源于stack exchange,提问作者Samuel Labrador
相关产品推荐
相关产品推荐

