ClassValue rooting objects after it goes away?
Vladimir Ivanov
vladimir.x.ivanov at oracle.com
Fri Mar 2 18:10:36 UTC 2018
Charlie,
Does it look similar to the following bugs?
https://bugs.openjdk.java.net/browse/JDK-8136353
https://bugs.openjdk.java.net/browse/JDK-8169425
If that's the same (and it seems so to me [1]), then speak up and
persuade Paul it's an important edge case (as stated in JDK-8169425).
Best regards,
Vladimir Ivanov
[1] new RubyClass(Ruby.this) in
public static class Ruby {
private ClassValue<RubyClass> cache = new ClassValue<RubyClass>() {
protected RubyClass computeValue(Class<?> type) {
return new RubyClass(Ruby.this);
}
};
On 3/1/18 2:25 AM, Charles Oliver Nutter wrote:
> So I don't think we ever closed the loop here. Did anyone on the JDK
> side confirm this, file an issue, or fix it?
>
> We still have ClassValue disabled in JRuby because of the rooting issues
> described here and in https://github.com/jruby/jruby/pull/3228.
>
> - Charlie
>
> On Thu, Aug 27, 2015 at 7:04 AM Jochen Theodorou <blackdrag at gmx.org
> <mailto:blackdrag at gmx.org>> wrote:
>
> 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/
>
> _______________________________________________
> mlvm-dev mailing list
> mlvm-dev at openjdk.java.net <mailto:mlvm-dev at openjdk.java.net>
> http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev
>
> --
>
> - Charlie (mobile)
>
>
>
> _______________________________________________
> mlvm-dev mailing list
> mlvm-dev at openjdk.java.net
> http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev
>
More information about the mlvm-dev
mailing list