我不明白为什么我的代码会引发内存不足异常。
我有一个代理调用一个函数,该函数将一行附加到“test.log”文件中。内存不足在 PersistentHashMap $ BitmapIndexedNode.assoc(PersistentHashMap.java:624)
上。
(use 'clojure.java.io)
(def the-agent(agent nil))
(defn process [_o content]
(spit "test.log" content :append true)
)
(defn write-all []
(doseq
[x (range 1 5000000)]
(send-off
the-agent
process
"Line to be appended\n"
)
)
)
谢谢 !
最佳答案
分派(dispatch)的发送在各个 Spit 上的 I/O 上被阻塞。分派(dispatch)的创建速度远远快于完成和积累的速度。
(defn write-all []
(doseq [x (range 1 5000000)]
(send-off the-agent process "foo")
(when (zero? (mod x 100000))
(println (. the-agent clojure.lang.Agent/getQueueCount)))))
user=> (write-all)
99577
199161
298644
398145
497576
596548
Exception in thread "nREPL-worker-0" java.lang.OutOfMemoryError: Java heap space
关于clojure - 内存不足,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18103725/