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