On Jun 25, 6:25 am, Rich Claxton <rich.clax...@gmail.com> wrote:
> Hello I have just started learning Clojure and functional programming,
> quick question, what happens internally when I do a defn, does this
> create the byte code, or a ref to the function which is stored, as it
> does actually create a function object, I was just wondering about
> memory and GC issues.

It gets complicated, because the JVM stores bytecode in a special
memory location that is separate from the heap.  In all but very early
versions of Clojure, however, there's a dynamic classloader so that
defined functions can get garbage collected.

Each (fn ...) or (defn ...) form is a dynamically-created class.  But,
as others have said, there is only one class for each time you *write*
(fn...), not a new class each time you call it.  So if you have one
(fn...) form that gets called a hundred times with different closed-
over values, it's still only going to create one class.

The only time GC of fns might be an issue is if you're constructing
the (fn...) forms in code and eval'ing them.  Even then, adjusting the
JVM memory parameters should be sufficient.

-SS
--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---

Reply via email to