У меня есть XML-файл размером 700 мб, который я обрабатываю из дерева записей в файл EDN.Clojure: почему этот писатель потребляет столько кучи пространства?
После выполнения всей обработки я, наконец, имею ленивую последовательность хешмапов, которые не особенно большие (не более 10 значений).
Чтобы закончить, я хочу, чтобы записать его в файл с
(defn write-catalog [catalog-edn]
(with-open [wrtr (io/writer "catalog-fr.edn")]
(doseq [x catalog-edn]
(.write wrtr (prn-str x)))))
Я не понимаю эту проблему, потому что doseq
предполагается не удерживать голову последовательности в памяти.
Мой конечный результат catalog
имеет тип clojure.lang.LazySeq
.
Я тогда делать
(write-catalog catalog)
Затем использование памяти шлифовке и у меня есть ошибка GC над головой около 80 МБ файла writter с XMX из 3g.
Я также пробовал с doseq
+ spit
и не prn-str
, то же самое бывает.
Это нормальное поведение?
Благодаря
Вы правы, я забыл, что заметил это. Если я хорошо понимаю, сборщик мусора не может освободить seq до тех пор, пока определено ограничение var. Я потребляю сейчас не так много памяти. Благодаря !! –