【发布时间】:2012-04-10 16:58:43
【问题描述】:
我正在 Clojure 中为 BaseX 编写一个插件,通过“lein uberjar”构建,其中包含 Clojure 解释器。在大多数情况下,这很有效。
但是,当通过 BaseX HTTP 实例运行时,评估发生在 Jetty 的线程池中,而不是在客户端断开连接后丢弃线程。
由于加载插件通过自定义类加载器加载 Clojure 的类,并且丢弃充当插件入口点的(AOT 编译的)对象实例不会丢弃 Clojure 在线程本地空间中放置的变量,类加载器泄漏结果是 PermGen 空间最终被 Clojure 解释器的多个实例耗尽。
如何解决?如有必要,我可以对 BaseX 的模块加载/卸载机制进行合理的非 Clojure 特定更改。
【问题讨论】:
标签: java memory-leaks clojure