11

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

4

1 回答 1

11

好吧,我认为类是从磁盘加载还是从内存加载并不重要,wrt PermGen 空间。

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

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

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

于 2011-02-23T09:14:49.693 回答