【发布时间】:2016-02-18 04:56:46
【问题描述】:
在Practical Clojure 中,作者提到一旦计算出惰性序列值,它就会被缓存。
如果我们从惰性序列中获得 非常 大量的值,我们是否会看到内存不足错误?或者是否有防止这种情况发生的机制(例如,删除旧的缓存值以为新值腾出空间)?
【问题讨论】:
标签: caching clojure lazy-sequences
在Practical Clojure 中,作者提到一旦计算出惰性序列值,它就会被缓存。
如果我们从惰性序列中获得 非常 大量的值,我们是否会看到内存不足错误?或者是否有防止这种情况发生的机制(例如,删除旧的缓存值以为新值腾出空间)?
【问题讨论】:
标签: caching clojure lazy-sequences
惰性序列中的已实现元素能够像 Clojure 中的任何其他对象一样被垃圾收集,但有一个重要的警告。你不应该持有对序列头部的引用。这被称为“抱头”。
具体而言,使用doall 来评估整个序列,或者在使用map 遍历惰性序列时存储对惰性序列的引用(比如在原子或def 中)都占据了主导地位。
【讨论】: