11

Cojureは初めてですが、AOTコンパイルを使用すると、関数ごとにクラスが生成されることを読みました。それは、perm-genスペースを消費するクラスがたくさんあることを意味しませんか?何か問題はありませんか?AOTコンパイルが使用されていないが、バイトコードがオンザフライで生成されている場合はどうでしょうか。

4

1 に答える 1

11

ええと、クラスがディスクからロードされるのか、メモリからロードされるのか、PermGenスペースからロードされるのかは問題ではないと思います。

ただし、問題は思ったほど悪くない場合があることに注意してください。各関数は1回コンパイルされます。特に、「オンザフライ」で生成された、あちこちで見ることができる無名関数は1回だけコンパイルされ、それらを呼び出すたびに、それらのクラスの新しいインスタンスが作成されます(インスタンスは字句コンテキストを格納するために必要です) 。

したがって、次のコードは、実行時にcreate-fnを呼び出す回数に関係なく、2つのクラス(1つはcreate-fn用、もう1つはlambda-fn用)の作成につながります。

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

于 2011-02-23T09:14:49.693 に答える