以下代码将导致OOME
(require '[clojure.core.async :refer [chan close! <! pub sub unsub go timeout]])
(def p* (chan))
(def p (pub p* :topic))
(go
(loop []
(let [s (chan)
t (rand-int Integer/MAX_VALUE)]
(sub p t s)
(<! (timeout 10))
(unsub p t s)
(close! s)
(recur))))
(它慢慢增长:要在合理的时间内看到OOME,要么给JVM非常小的内存如64m,要么移除超时步骤。)
问题
我试图分析代码,原因似乎是由于尽管我
从端口取消订阅了通道,但某些东西仍然保留,导致
堆被用完。