Ral*_*lph 12 closures garbage-collection clojure
我的理解是,Java中使用的默认ClassLoader(以及Clojure)持有指向创建的任何匿名类的指针,因此指向lambdas和闭包.这些永远不会被垃圾收集,因此代表了"内存泄漏".对Java 7或8进行了一些调查(https://blogs.oracle.com/jrose/entry/anonymous_classes_in_the_vm)添加一个不会保留对这些函数的引用的匿名ClassLoader.与此同时,人们如何处理用Clojure和Scala等语言编写长期运行的应用程序,以鼓励使用这些结构?
有没有可能Clojure可以提供自己的匿名ClassLoader,扩展系统一个,但不保留创建的类?
Ral*_*lph 14
从bendin的评论以上,并从信息喜悦的Clojure的,由迈克尔Fogus和Chris Houser的,在章节'编译时间与运行时间’(第7章,第7.2节),Fogus和豪泽解释说,关闭和匿名函数在编译时被编译为字节代码,并且每次调用返回闭包的高阶函数,只返回闭包类的新实例,而不是新类.当然,这些实例将被垃圾收集.由于匿名函数和闭包的数量存在明显的编译时上限,因此内存很少会出现问题.
我的担忧是没有根据的.