【问题标题】:Does clojure repl store the return value of previous commandsclojure repl 是否存储先前命令的返回值
【发布时间】:2018-11-21 18:02:31
【问题描述】:

如果我在 clojure repl 中执行此命令:

(take 5000000 (range))

此命令打印出最多 500 万的数字(需要一些时间),并且在执行 and it stays at that throughout the rest of the session 期间,clojure 的内存使用量增加到 750 MB。 repl 是存储了之前命令的返回值还是因为 clojure 内存泄漏?

【问题讨论】:

  • Clojure 保留了一些最新的调用(如果我没记错的话,有 2 或 3 个),但我想这更多是 JVM 的问题,它不会将内存还给操作系统(这是标准行为)我可以告诉)。可能不会使用内存,但会保留空间。默默地尝试你的代码几次,你就会看到。
  • @JosephYourine 我试过了,每次调用时内存使用量都在增加。

标签: java memory-leaks clojure read-eval-print-loop


【解决方案1】:

是的,Clojure REPL retains the result of the last 3 expressions

使用 REPL 时有几个特殊的变量可用:

  • *1, *2, *3 - 保存最后三个计算的表达式的结果

  • *e - 保存最后一个异常的结果

一旦您执行更多表达式并且占用如此多内存的结果不再被*1*2*3 之一引用,那么下一次垃圾收集器运行应该回收该内存。

【讨论】:

    猜你喜欢
    • 2016-10-18
    • 2011-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-25
    相关资源
    最近更新 更多