gpt4 book ai didi

scala - 为什么 Scala Range 迭代器会缓冲——有时?

转载 作者:行者123 更新时间:2023-12-04 17:40:21 25 4
gpt4 key购买 nike

在 Scala 2.9.1 中,这可以正常工作:

scala> (1 to Int.MaxValue).sum
res6: Int = -1073741824

然而,这耗尽了堆空间:
scala> (1 to Int.MaxValue).toIterator.sum
java.lang.OutOfMemoryError: GC overhead limit exceeded

但令人抓狂的是,这有效:
scala> (1 to Int.MaxValue).iterator.sum
res8: Int = -1073741824

为什么其中任何一个都不同?

最佳答案

toIteratorTraversableLike 中定义作为

def toIterator: Iterator[A] = toStream.iterator

所以它创建了一个 Stream在后台,它在迭代时将所有元素保留在内存中。

( 编辑 :我认为流结构实际上不是这里的问题。然而, toStream 本身调用 toBuffer ,它依次复制每个值。)
iterator另一方面是在 IndexedSeqLike 中定义的它使用一种特殊的结构,不会在内存中保留任何元素。

关于scala - 为什么 Scala Range 迭代器会缓冲——有时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8244600/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com