RFR (S) 8140483: Atomic*FieldUpdaters final fields should be trusted

Vitaly Davidovich vitalyd at gmail.com
Tue Oct 27 12:28:25 UTC 2015


FWIW I like (b) as well.  You made a GUARDED_ENTRY change in (a) - is that
a good change to make even if you go with (b)?

sent from my phone
On Oct 27, 2015 7:20 AM, "Aleksey Shipilev" <aleksey.shipilev at oracle.com>
wrote:

> Hi,
>
> I'd like to start a formal review for the change:
>    https://bugs.openjdk.java.net/browse/JDK-8140483
>
> The feedback was overwhelmingly positive so far. Some suggested we use
> compiler control and/or maintain the list of trusted classes. I still
> think it is an overkill for the fix at hand, and we should instead wait
> for the wholesale final field optimizations. Therefore, I suggest we go
> with the explicit exceptions.
>
> Now, it may take two forms:
>
>  a) Accept all non-serializable java/util/concurrent/atomic classes:
>       http://cr.openjdk.java.net/~shade/8140483/webrev.01/
>
>  b) Spell out A*FU symbol names explicitly:
>       http://cr.openjdk.java.net/~shade/8140483/webrev.02/
>
> I am leaning towards (b), because it does not involve hacking
> ciKlass::is_subtype_of, and it appears much safer from the correctness
> standpoint. Both changes pass JPRT, and both changes improve A*FU
> performance and the generated code quality.
>
> Thanks,
> -Aleksey
>
> On 10/26/2015 05:14 PM, Aleksey Shipilev wrote:
> > Hi,
> >
> > I would like to gauge interest in doing a simple VM change that
> > significantly improves the performance of Atomic*FieldUpdaters:
> >  https://bugs.openjdk.java.net/browse/JDK-8140483
> >
> > In short, we are looking into folding away the checks in A*FU:
> >
> >   private final Class<T> tclass;
> >   private final Class<?> cclass;
> >
> >   public final int get(T obj) {
> >     if (obj == null || obj.getClass() != tclass || cclass != null)
> >       fullCheck(obj);
> >     return unsafe.getIntVolatile(obj, offset);
> >   }
> >
> > Since most use cases for A*FU involve putting them into static final
> > fields, the Updater instances are known constants. Now, the internal
> > instance final fields are not trusted by default. This can be "fixed"
> > with -XX:+TrustNonStaticFinalFields -- the bad thing about this option
> > is that it's global, and it may break user code. Vladimir I. has a
> > potential improvement that handles this by tracking the final field
> > writes, but there is no clear ETA for that feature.
> >
> > With this little VM improvement, we can close the gap for A*FU, and
> > eliminate another reason for using Unsafe today:
> >  http://cr.openjdk.java.net/~shade/8140483/webrev.00/
> >
> > It improves the generated code and performance significantly:
> >  http://cr.openjdk.java.net/~shade/8140483/notes.txt
> >
> > Thanks,
> > -Aleksey
> >
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openjdk.java.net/pipermail/hotspot-compiler-dev/attachments/20151027/a1ca90e7/attachment-0001.html>


More information about the hotspot-compiler-dev mailing list