In trying to reproduce the problem outside of Groovy I stumbled over a case case which I think should work

public class MyClassValue extends ClassValue {
    protected Object computeValue(Class type) {
        Dummy ret = new Dummy();
        Dummy.l.add (this);
        return ret;

 class Dummy {
     static final ArrayList l = new ArrayList();

basically this means there will be a hard reference on the ClassValue somewhere. It can be in a static or non-static field, direct or indirect. But this won't collect. If I put for example a WeakReference in between it works again.

Finally I also tested to put the hard reference in a third class instead, to avoid this self reference. But it can still not collect.

So I currently have the impression that if anything holds a hard reference on the class value that the classloader cannot be collected anymore.

Unless I misunderstand something here I see that as a bug

bye blackdrag

Jochen "blackdrag" Theodorou
blog: http://blackdragsview.blogspot.com/

mlvm-dev mailing list

Reply via email to