Ответ 1
Ну, я думаю, что неважно, загружен ли класс с диска или из памяти, в пространство PermGen.
Однако обратите внимание, что проблема может быть не такой плохой, как вы думаете: каждая функция компилируется один раз. В частности, анонимные функции, которые вы видите здесь или там, генерируемые "на лету", компилируются только один раз, и каждый их вызов просто приводит к созданию новых экземпляров этих классов (экземпляр необходим для хранения лексического контекста).
Таким образом, следующий код приводит к созданию двух классов (один для create-fn, один для lambda-fn), независимо от количества вызовов create-fn во время выполнения:
(defn create-fn [n] (fn lambda-fn [x] (add n x)))