Right, this is because nREPL uses clojure.main/repl each time it does an evaluation. See http://dev.clojure.org/jira/browse/NREPL-31 for a related issue that was addressed by modifying clojure.main/repl.
I'm not sure where a fix for this would belong (nREPL or clojure.main), but I went ahead and opened an nREPL JIRA issue to track it: http://dev.clojure.org/jira/browse/NREPL-36 - Colin On Monday, December 10, 2012 2:46:10 AM UTC-6, Vladimir Tsichevski wrote: > > Hi, > > just found that every interaction with Clojure REPL causes one > more DynamicClassLoader put on the Thread context class loader chain. > > Here is how clojure.main/repl beginning looks like: > > (let [cl (.getContextClassLoader (Thread/currentThread))] > (.setContextClassLoader (Thread/currentThread) > (clojure.lang.DynamicClassLoader. cl))) > > And this is how to observe it: > > nREPL server started on port 19987 > REPL-y 0.1.0-beta10 > Clojure 1.4.0 > Exit: Control+D or (exit) or (quit) > Commands: (user/help) > Docs: (doc function-name-here) > (find-doc "part-of-name-here") > Source: (source function-name-here) > (user/sourcery function-name-here) > Javadoc: (javadoc java-object-or-class-here) > Examples from clojuredocs.org: [clojuredocs or cdoc] > (user/clojuredocs name-here) > (user/clojuredocs "ns-here" "name-here") > user=> (defn print-class-loader-stack > ([] > (print-class-loader-stack (.getContextClassLoader > (Thread/currentThread)))) > ([cl] > (if cl > (do > (pprint cl) > (print-class-loader-stack (.getParent cl))) > (println "*Top*")))) > #_=> #_=> #_=> #_=> #_=> #_=> #_=> #_=> > #'user/print-class-loader-stack > user=> (print-class-loader-stack) > #<DynamicClassLoader clojure.lang.DynamicClassLoader@26a0c73f> > #<DynamicClassLoader clojure.lang.DynamicClassLoader@6f603bdc> > #<DynamicClassLoader clojure.lang.DynamicClassLoader@2f368c5d> > #<DynamicClassLoader clojure.lang.DynamicClassLoader@5b31fd9> > #<AppClassLoader sun.misc.Launcher$AppClassLoader@4aad3ba4> > #<ExtClassLoader sun.misc.Launcher$ExtClassLoader@3326b249> > *Top* > nil > user=> 1 > 1 > user=> 1 > 1 > user=> 1 > 1 > user=> 1 > 1 > user=> (print-class-loader-stack) > #<DynamicClassLoader clojure.lang.DynamicClassLoader@5be04861> > #<DynamicClassLoader clojure.lang.DynamicClassLoader@7481933a> > #<DynamicClassLoader clojure.lang.DynamicClassLoader@273f212a> > #<DynamicClassLoader clojure.lang.DynamicClassLoader@4178feba> > #<DynamicClassLoader clojure.lang.DynamicClassLoader@5323961b> > #<DynamicClassLoader clojure.lang.DynamicClassLoader@26a0c73f> > #<DynamicClassLoader clojure.lang.DynamicClassLoader@6f603bdc> > #<DynamicClassLoader clojure.lang.DynamicClassLoader@2f368c5d> > #<DynamicClassLoader clojure.lang.DynamicClassLoader@5b31fd9> > #<AppClassLoader sun.misc.Launcher$AppClassLoader@4aad3ba4> > #<ExtClassLoader sun.misc.Launcher$ExtClassLoader@3326b249> > *Top* > nil > user=> > -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en