ClassValue rooting objects after it goes away?
Jochen Theodorou
blackdrag at gmx.org
Thu Aug 27 11:34:09 UTC 2015
One more thing...
Remi, I tried your link with my simplified scenario and it does there
not stop the collection of the classloader
Am 27.08.2015 11:54, schrieb Jochen Theodorou:
> 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