如何在Clojure中泄漏内存?

时间:2009-04-15 00:48:01

标签: memory-leaks clojure

周四在湾区Clojure聚会上的演讲我正在编制一份在Clojure中泄漏记忆的方法清单。

到目前为止,我有:

  • 抓住无限序列的头
  • 通过在循环中调用lambda来创建许多泛型类(这仍然是个问题)
  • 保留对未使用数据的引用
  • ...

还有什么?

4 个答案:

答案 0 :(得分:9)

通过在大型集合上保留对seq的引用。例如:

(drop 999990 (vec (range 1000000))) 

返回包含对整个向量的引用的十个元素的序列!

答案 1 :(得分:3)

另一个显而易见的方法是使用泄漏内存的任何Java库。 (例如Qt Jambi

关于lambdas,请阅读herehere以及here。我认为这是在最新版本的Clojure中修复的。

答案 2 :(得分:2)

也有实习生电话。

请注意,您的示例不会在常识中泄漏内存。您仍然可以访问对象(不确定类 - 我假设可以通过某些API重新找到它们),即它们没有丢失。对于像类和实习字符串这样的某些东西,忘记数据是不可能的,所以效果是一样的。

答案 3 :(得分:0)

Clojure内存泄漏通常与Java内存泄漏非常相似。但是,集合是“持久的”这一事实意味着,如果您将某些内容添加到集合中并且没有意识到您保留了对旧版本集合的引用以及新值意味着使用内存来保留旧内容版本徘徊。