[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