我是Cojure的新手,但我读到在使用AOT编译时会为每个函数生成一个类。这是不是意味着很多消耗了perm-gen空间的类?这有什么问题吗?什么时候不使用AOT编译,但是在运行中生成字节码?
答案 0 :(得分:11)
好吧,我认为无论是从磁盘还是从内存加载类都没关系,而且是PermGen空间。
但是,请注意问题可能没有您想象的那么糟糕:每个函数都编译一次。特别是,你可以在这里或那里看到的“动态”生成的匿名函数只编译一次,每次调用它们只会导致创建这些类的新实例(一个实例是需要存储词汇上下文。)
所以下面的代码导致创建两个类(一个用于create-fn,一个用于lambda-fn),无论create-fn的调用次数是在运行时:
(defn create-fn [n] (fn lambda-fn [x] (add n x)))