[13] RFR (M): 8223216: C2: Unify class initialization checks between new, getstatic, and putstatic
Vladimir Kozlov
vladimir.kozlov at oracle.com
Thu May 2 00:42:19 UTC 2019
Looks good.
Thanks,
Vladimir
On 5/1/19 4:37 PM, Vladimir Ivanov wrote:
> http://cr.openjdk.java.net/~vlivanov/8223216/webrev.00/
> https://bugs.openjdk.java.net/browse/JDK-8223216
>
> (The patch has minor dependencies on 8223213 [1] I sent out for review earlier.)
>
> C2 implements class initialization checks for new and getstatic/putstatic differently: while "new" supports fast class
> initialization checks, static field accesses rely on uncommon traps which may lead to deoptimization/recompilation
> storms during long-running class initialisation.
>
> Proposed patch unifies implementation between them and uses the following barrier:
> if (holder->is_initialized()) {
> uncommon_trap(initialized, reinterpret);
> }
> if (!holder->is_reentrant_initialization(current_thread)) {
> uncommon_trap(uninitialized, none);
> }
>
> It also enhances checks for not-yet-initialized classes (Compile::needs_clinit_barrier) and unifies the implementation
> between new, invokestatic, and getfield/putfield.
>
> Testing: tier1-5, targeted microbenchmarks, new test from 8223213
>
> Thanks!
>
> Best regards,
> Vladimir Ivanov
>
> [1] http://cr.openjdk.java.net/~vlivanov/8223213/webrev.00/
> https://bugs.openjdk.java.net/browse/JDK-8223213
>
More information about the hotspot-compiler-dev
mailing list