我不明白为什么我的代码会引发内存不足异常。

我有一个代理调用一个函数,该函数将一行附加到“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/

10-13 04:27