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