Review Request: JDK-8235521: Replacement API for Unsafe::ensureClassInitialized

Paul Sandoz paul.sandoz at oracle.com
Thu Jun 4 16:55:40 UTC 2020



> On Jun 3, 2020, at 7:31 PM, Mandy Chung <mandy.chung at oracle.com> wrote:
> 
> 
> 
> On 6/3/20 5:16 PM, Paul Sandoz wrote:
>> Hi Mandy,
>> 
>> Did you consider an alternative name, such as:
>> 
>> /**
>>  * Initializes {@code targetClass}, if not already initialized.
>>  * ...
>> */
>> public Class<?> initializeClass(Class<?> targetClass) ...
>> 
>> ?
> 
> I considered this.   The targetClass may have been initialized.  `initializeClass` seems to be read that it should check if it's initialized before calling??    I also considered `ensureInitialized` which can be an option.   I'm open to suggestion.
> 

FWIW I keep tripping over the prefix “ensures”.  As I understand the implementation initializes a class, if not already so (and it has to check as you point out below). Focusing on the main action seems appropriate in this regard. I expect John has more context on the naming.


>> What about the companion Unsafe.shouldBeInitialized? I have seen (and written) code like this:
>> 
>>   if (UNSAFE.shouldBeInitialized(cls)) {
>>       UNSAFE.ensureClassInitialized(cls);
>>   }
> 
> A class may be initialized in many ways as specified in JVMS 5.5 (e.g. another thread accesses a static member of this class).   The class may get initialized right after `shouldBeInitialized` returns true.   `ensureClassInitialized` handles the case when the class has been initialized and I don't see the need to expose it.
> 

Ok.

>> Although it seems redundant to perform the check, suggesting it is not needed.
>> 
>> I believe there is also some gnarly case during a clinit of C where ensureClassInitialized(C) is called and a subsequent call to shouldBeInitialized(C) returns true. Is that correct? If so it makes me reluctant to expose it and try and explain the edge cases.
> 
> Yes.
>> Maybe if we don’t think Unsafe.shouldBeInitialized needs a supported equivalent we can still deprecate it?
> 
> Good idea.   I will update the patch and CSR.
> 

Ok.

Paul.


More information about the core-libs-dev mailing list