请分享您的想法,参加2024年Clojure状态调查!点此参与

欢迎!请参阅关于页面,了解更多该网站的工作方式。

0
core.cache

大家好!我在玩LIRSCache时遇到了我认为是一个错误的问题。

https://github.com/clojure/core.cache/blob/master/src/main/clojure/clojure/core/cache.clj#L371

在大量唯一键缺失的情况下,堆栈S将无限增长并超出你所提供的限制。

(def C (cache/lirs-cache-factory {} :s-history-limit 2 :q-history-limit 1))(defn populate [n] (let [pairs (map (fn [x] [x x]) (range n))] (reduce (fn [cache [k v]] (cache/miss cache k v)) C pairs))) (.toString (populate 10)) "{9 9, 1 1, 0 0}, {0 1, 1 2, 2 3, 3 4, 4 5, 5 6, 6 7, 7 8, 8 9, 9 10}, {9 10}, 10, 2, 1"

您可以看到S堆栈正在无限增长,如果您用(populate 1000),则它将扩展到1000个元素大。

我不确定期望的结果是什么,但每次我们在队列中添加一些东西时,我们需要确保我们正确处理被踢出的事物,除非我误解了事情。

感谢让Clojure变得很棒!

1 个答案

0
参考资料:https://clojure.atlassian.net/browse/CCACHE-32(由ale+xport报告)
...