Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用require with:reload选项是否有在Clojure中建立内存的趋势?_Clojure - Fatal编程技术网

使用require with:reload选项是否有在Clojure中建立内存的趋势?

使用require with:reload选项是否有在Clojure中建立内存的趋势?,clojure,Clojure,我有一个应用程序,为了重新加载插件,每当需要重新加载插件时,都需要使用:reload选项。我注意到,当我这样做的时候,它会一次积累大约2-3兆的内存。我很好奇是什么导致了这种事情的发生。以前重新加载的数据是否保存在内存中?有没有办法完全重新加载命名空间 编辑:还需要指出的是,每个重新加载的插件都会为另一个命名空间中的多方法生成新的defmethods(永远不会重新加载)。在重新加载时,这些方法可能保存在内存中?Clojure将内存管理推迟到JVM。虽然我对clojure的代码库不太了解,但它可能

我有一个应用程序,为了重新加载插件,每当需要重新加载插件时,都需要使用:reload选项。我注意到,当我这样做的时候,它会一次积累大约2-3兆的内存。我很好奇是什么导致了这种事情的发生。以前重新加载的数据是否保存在内存中?有没有办法完全重新加载命名空间


编辑:还需要指出的是,每个重新加载的插件都会为另一个命名空间中的多方法生成新的defmethods(永远不会重新加载)。在重新加载时,这些方法可能保存在内存中?

Clojure将内存管理推迟到JVM。虽然我对clojure的代码库不太了解,但它可能只是用重新加载的代码重新分配变量——这将在JVM运行垃圾收集器之前保留旧对象

您可以向JVM提示您希望GC使用(System/GC)运行,但通常不建议使用

或者,如果您知道系统的限制,您可以修改JVM内存标志,以鼓励GC更频繁地运行(即使用较低的堆大小)


但是,如果您的系统没有真正的内存限制,节省几MB并不重要。

事实证明,我没有对它进行足够长的测试。内存只会增长到一定的水平,然后就会停止,最终会下降很多


男孩和女孩:在抱怨bug之前测试代码。

我在Clojure中开发的方法是修改源代码,然后使用/require函数和:reload选项。我没有经历过你所描述的,但我通常不使用多重方法,而且只有少数函数被重新定义。