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