RFR: 8166840: Synthetic bridge constructor in ArrayList$Itr blocks inlining

Krystal Mok rednaxelafx at gmail.com
Wed Sep 28 14:40:09 UTC 2016


Hi Claes,

For this particular case, this JDK-side change looks good to me.

Let me post out the HotSpot version of the change and let you guys decide
whether or not you guys want to take that version (which will take care of
the ArrayList$1 case without the JDK-side change).

Thanks,
Kris

On Wed, Sep 28, 2016 at 4:48 AM, Claes Redestad <claes.redestad at oracle.com>
wrote:

> Hi,
>
> as discussed recently on hotspot-compiler-dev[1], having a private class
> with no default constructor can lead to C2 failing to inline, due to the
> synthetic bridge constructor using a dummy argument of an uninitialized
> class. This is really a problem in C2, as well as something which could
> ultimately be resolved by nestmates...
>
> However, there is an easy workaround in adding an empty package-private
> constructor. In the most recently found case - a microbenchmark stressing
> MethodHandles.iteratedLoop - adding this to ArrayList$Itr lead to a 2.5-3x
> speedup.
>
> This is me asking nicely to do a quick-fix for this in
> java.util.ArrayList$Itr now:
>
> Bug: https://bugs.openjdk.java.net/browse/JDK-8166840
> Webrev: http://cr.openjdk.java.net/~redestad/8166840/webrev.01/
>
> Thanks!
>
> /Claes
>
> [1] http://mail.openjdk.java.net/pipermail/hotspot-compiler-dev/
> 2016-September/024407.html
>


More information about the core-libs-dev mailing list