ClassValue rooting objects after it goes away?

Jochen Theodorou blackdrag at gmx.org
Thu Aug 27 09:54:37 UTC 2015


Hi,

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/



More information about the mlvm-dev mailing list