このSOスレッドseq
では、大きなコレクションでaへの参照を保持すると、コレクション全体がガベージコレクションされるのを防ぐことができることを学びました。
まず、そのスレッドは2009年のものです。これは「最新の」Clojure(v1.4.0またはv1.5.0)でも当てはまりますか?
第二に、この問題は怠惰なシーケンスにも当てはまりますか?たとえば(def s (drop 999 (seq (range 1000))))
、ガベージコレクターが999
シーケンスの最初の要素をリタイアできるようにしますか?
最後に、大規模なコレクションでこの問題を回避する良い方法はありますか?つまり、たとえば1,000万個の要素のベクトルがある場合、消費された部分をガベージコレクションできるようにベクトルを消費できますか?1000万個の要素を持つハッシュマップがある場合はどうなりますか?
私が尋ねる理由は、私がかなり大きなデータセットを操作しているためです。オブジェクトへの参照を保持しないように注意する必要があります。これにより、不要なオブジェクトをガベージコレクションできるようになります。そのまま、java.lang.OutOfMemoryError: GC overhead limit exceeded
エラーが発生する場合があります。