Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
不';Clojure是否会占用过多的烫发空间?_Clojure_Permgen - Fatal编程技术网

不';Clojure是否会占用过多的烫发空间?

不';Clojure是否会占用过多的烫发空间?,clojure,permgen,Clojure,Permgen,我是Cojure的新手,但我了解到在使用AOT编译时,会为每个函数生成一个类。这难道不是意味着大量的类会占用perm gen空间吗?这没有什么问题吗?如果不使用AOT编译,但字节码是动态生成的,那该怎么办?好吧,我认为类是从磁盘还是从内存加载并不重要,wrt PermGen space 但是,请注意,问题可能没有您想象的那么严重:每个函数只编译一次。特别是,您可以在这里或那里看到的“动态”生成的匿名函数只编译一次,每次调用它们只会导致创建这些类的新实例(需要一个实例来存储词汇上下文) 因此,以下

我是Cojure的新手,但我了解到在使用AOT编译时,会为每个函数生成一个类。这难道不是意味着大量的类会占用perm gen空间吗?这没有什么问题吗?如果不使用AOT编译,但字节码是动态生成的,那该怎么办?

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

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

因此,以下代码导致创建两个类(一个用于create fn,一个用于lambda fn),无论运行时创建fn的调用数量如何:


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

在REPL,类可以被GCed,因为每个REPL交互创建一个新的抛出类加载器来加载新编译的函数。