我刚接触Cojure,但我读到在使用AOT编译时,会为每个函数生成一个类。这不是意味着需要大量占用perm-gen空间的类吗?这有什么问题吗?如果不使用AOT编译,但字节码是动态生成的,该怎么办?
发布于 2011-02-23 17:14:50
我认为类是从磁盘还是内存加载的,或者是从PermGen空间加载的,这都无关紧要。
但是,请注意,问题可能并不像您想象的那么糟糕:每个函数都编译一次。特别是,你可以在这里或那里看到的匿名函数,“动态生成”只编译一次,每次调用它们只会导致创建这些类的新实例(需要一个实例来存储词法上下文)。
因此,下面的代码导致创建两个类(一个用于create-fn,一个用于lambda-fn),无论在运行时对create-fn的调用次数是多少:
(defn create-fn [n] (fn lambda-fn [x] (add n x)))
https://stackoverflow.com/questions/5088428
复制相似问题