[13] RFR (M): 8223216: C2: Unify class initialization checks between new, getstatic, and putstatic

Vladimir Ivanov vladimir.x.ivanov at oracle.com
Thu May 2 21:55:48 UTC 2019


Thanks, Vladimir.

Best regards,
Vladimir Ivanov

On 01/05/2019 17:42, Vladimir Kozlov wrote:
> 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