[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