RFR: 8221477: Inject os/cpu-specific constants into Unsafe from JVM
David Holmes
david.holmes at oracle.com
Fri Apr 5 08:45:09 UTC 2019
Hi Peter,
On 5/04/2019 5:37 pm, Peter Levart wrote:
> Hi Andrew,
>
> For a casual reader (like me) the comments in the UnsafeConstants for
> each field:
>
> 69 * @implNote
> 70 * The actual value for this field is injected by the JVM.
>
> ...make one wonder what is actually going on regarding the static
> initializer at the end of the class. Is it actually executed? Is it
> there just to silence the javac and prevent fields from becoming
> compile-time constants?
That's what the earlier class comment is about:
* @implNote
*
* The JVM injects hardware-specific values into all the static fields
* of this class during JVM initialization. The static initialization
* block exists to prevent the fields from being considered constant
* variables, so the field values will be not be compiled directly into
* any class that uses them.
*/
Cheers,
David
> Reading the patch further uncovers the secret:
>
> 3645 // initialize the hardware-specific constants needed by Unsafe
> 3646 initialize_class(vmSymbols::jdk_internal_misc_UnsafeConstants(),
> CHECK);
> 3647 jdk_internal_misc_UnsafeConstants::set_unsafe_constants();
>
> If my understanding is correct, then the static initializer *is*
> executed and then the fields' values are overwritten with injected values.
>
> So perhaps it might be nice to write that down in the javadoc like:
>
> 69 * @implNote
> 70 * The actual value for this field is injected by the JVM
> immediately after the class initialization.
>
> Or something similar in the class-level javadoc.
>
> Just for the peace of mind of casual readers or perhaps someone that
> might later add a field to this class and try to initialize it in the
> static initializer, although I think this class is reserved for injected
> fields only...
>
> Regards, Peter
>
> On 4/4/19 5:19 PM, Andrew Dinn wrote:
>> New webrev is now available. Re-reviews welcome.
>>
>> JIRA: https://bugs.openjdk.java.net/browse/JDK-8221477
>> Webrev: http://cr.openjdk.java.net/~adinn/8221477/webrev.03
>>
>> This version should address all comments from Thomas, David and Coleen.
>>
>> Testing
>> Tier1 test passed.
>> Submit test passed.
>>
>> regards,
>>
>>
>> Andrew Dinn
>> -----------
>> Senior Principal Software Engineer
>> Red Hat UK Ltd
>> Registered in England and Wales under Company Registration No. 03798903
>> Directors: Michael Cunningham, Michael ("Mike") O'Neill, Eric Shander
>
More information about the core-libs-dev
mailing list