[13] RFR (S): 8188133: C2: Static field accesses in clinit can trigger deoptimizations

Vladimir Ivanov vladimir.x.ivanov at oracle.com
Fri Feb 1 18:14:42 UTC 2019

> If we consider solving general case, I had the following idea in mind: 
> compile special versions for method of not-yet-initialized classes and 
> throw them away once the class is fully initialized.
> Special versions would contain 2 guards:
>    (1) if holder_klass is initialized, then deoptimize and recompile;
>    (2) if current_thread != thread_running_clinit, then deoptimize and 
> recompile;
> The former eliminates initialization check once it becomes redundant and 
> the latter blocks invocations from other threads until the class is 
> fully initialized.

Also, former check (holder_klass is initialized) can be implemented as a 
nmethod dependency.

Best regards,
Vladimir Ivanov

More information about the hotspot-compiler-dev mailing list