私はレコードツリーからEDNファイルに処理する700 MBのXMLファイルを持っています。Clojure:なぜこの作家はヒープスペースを消費しますか?
すべての処理を済ませた後、最終的には、特に大きな値ではない(ほとんどの場合10個の値)ハッシュマップのレイジーシーケンスがあります。終了するには
、私はdoseq
がメモリ内のシーケンスの頭を保持しないことになっているので、私は問題を理解していない
(defn write-catalog [catalog-edn]
(with-open [wrtr (io/writer "catalog-fr.edn")]
(doseq [x catalog-edn]
(.write wrtr (prn-str x)))))
のファイルにそれを書きたいです。
最終出力catalog
はclojure.lang.LazySeq
です。
私はその後
(write-catalog catalog)
を行うその後、メモリ使用量は、粉砕され、私は、3GのXMXとファイルwritterの80メガバイトの周りでのGCのオーバーヘッドエラーを持っています。
私もdoseq
+ spit
で、またprn-str
と同じことが起こりました。
これは正常な動作ですか?おそらく
おかげ
あなたは正しいです、私はこれに気づいたことを忘れました。私がよく理解していれば、定義されたvarがバインドされている限り、ガベージコレクタはseqを解放できません。私は今はあまり記憶を消費しない。ありがとう!! –