On Tue, May 18, 2010 at 4:40 PM, Blake McBride blake@mcbride.name wrote:
Dear Alessio,
It sounds like you are doing some great stuff. However, I wanted to be vocal about an issue that is critically important to me (for whatever that's worth). Erik is aware of this so perhaps there is no potential issue.
It is critically important for my use of ABCL that data _and_ code be GC'able by _Java_. So, for example, I need to be able to load an infinite number of Lisp source files in a fixed amount of memory (so long as not all the functions are being referenced at the same time). This way I can load a Lisp source file, execute code, de-reference the entire package making the entire code module GC'able.
I haven't completely tested this but I've been in communication with Eric and I believe this is possible now.
I don't care about GC'ing individual functions necessarily, however, being able to completely GC either a source module or a package is important.
Hi Blake,
functions should be GCable both on trunk and on my branch. The difference is that trunk uses a classloader per function, so the GC granularity is finer: when a given function is not referenced anymore, it is GCed along with its class and classloader. With a classloader per FASL, as in my branch, I believe that a given function class loaded from a FASL will only be GCed when *all* the other functions in the same FASL are determined to be unreachable. Since you're speaking about dereferencing a whole package, I think that GC of compiled functions will occur just fine. But, to be sure, I'll do some tests; thanks for raising the issue.
Cheers, Alessio