【问题标题】:Doesn't Clojure consume too much perm-gen space?Clojure 不会消耗太多的 perm-gen 空间吗?
【发布时间】:2011-07-02 14:03:11
【问题描述】:

我是 Cojure 的新手,但我读到在使用 AOT 编译时,会为每个函数生成一个类。那不是意味着一大堆消耗perm-gen空间的类吗?没有任何问题吗?不使用 AOT 编译,而是动态生成字节码怎么办?

【问题讨论】:

    标签: clojure permgen


    【解决方案1】:

    好吧,我认为类是从磁盘加载还是从内存加载都没有关系,wrt PermGen 空间。

    但是,请注意问题可能没有您想象的那么严重:每个函数都编译一次。特别是,您可以在这里或那里看到的“动态”生成的匿名函数只编译一次,并且每次调用它们只会导致这些类的新 instances 的创建(一个实例是需要存储词汇上下文)。

    所以下面的代码会导致创建两个类(一个用于 create-fn,一个用于 lambda-fn),无论在运行时调用 create-fn 的次数是多少:

    (defn create-fn [n] (fn lambda-fn [x] (add n x)))

    【讨论】:

    • 而且,在 REPL 中,可以对类进行 GC,因为每个 REPL 交互都会创建一个新的一次性类加载器来加载新编译的函数。
    猜你喜欢
    • 2013-05-15
    • 1970-01-01
    • 1970-01-01
    • 2021-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-08
    相关资源
    最近更新 更多