在这个 SO thread中,我了解到seq
在大型集合上保留对 a 的引用将防止整个集合被垃圾收集。
首先,该线程来自 2009 年。在“现代”Clojure(v1.4.0 或 v1.5.0)中仍然如此吗?
其次,这个问题是否也适用于惰性序列?例如,是否(def s (drop 999 (seq (range 1000))))
允许垃圾收集器淘汰999
序列的第一个元素?
最后,对于大型收藏品是否有解决此问题的好方法?换句话说,如果我有一个包含 1000 万个元素的向量,我是否可以以这样一种方式使用该向量,使得消耗的部分可以被垃圾收集?如果我有一个包含 1000 万个元素的哈希图呢?
我问的原因是我正在对相当大的数据集进行操作,并且我必须更加小心不要保留对对象的引用,以便可以对我不需要的对象进行垃圾收集。java.lang.OutOfMemoryError: GC overhead limit exceeded
事实上,在某些情况下我会遇到错误。