【发布时间】:2011-07-02 14:03:11
【问题描述】:
我是 Cojure 的新手,但我读到在使用 AOT 编译时,会为每个函数生成一个类。那不是意味着一大堆消耗perm-gen空间的类吗?没有任何问题吗?不使用 AOT 编译,而是动态生成字节码怎么办?
【问题讨论】:
我是 Cojure 的新手,但我读到在使用 AOT 编译时,会为每个函数生成一个类。那不是意味着一大堆消耗perm-gen空间的类吗?没有任何问题吗?不使用 AOT 编译,而是动态生成字节码怎么办?
【问题讨论】:
好吧,我认为类是从磁盘加载还是从内存加载都没有关系,wrt PermGen 空间。
但是,请注意问题可能没有您想象的那么严重:每个函数都编译一次。特别是,您可以在这里或那里看到的“动态”生成的匿名函数只编译一次,并且每次调用它们只会导致这些类的新 instances 的创建(一个实例是需要存储词汇上下文)。
所以下面的代码会导致创建两个类(一个用于 create-fn,一个用于 lambda-fn),无论在运行时调用 create-fn 的次数是多少:
(defn create-fn [n] (fn lambda-fn [x] (add n x)))
【讨论】: