RFR(S) 8189140 - SystemDictionaryShared::initialize() should be renamed to be more meaningful

coleen.phillimore at oracle.com coleen.phillimore at oracle.com
Tue May 15 22:23:42 UTC 2018



On 5/15/18 6:22 PM, coleen.phillimore at oracle.com wrote:
>
>
>
> On 5/15/18 5:47 PM, Ioi Lam wrote:
>> I've updated the webrev:
>>
>> http://cr.openjdk.java.net/~iklam/jdk11/8189140-rename-system-dict-shared-initialize.v02/ 
>>
>>
>> 1. Added JavaCalls::new_instance so we can avoid all the boiler plate 
>> code for allocating
>>    the instance andinvoking the constructor.
>>
>> JavaCalls::new_instance calls InstanceKlass->initialize. This is just 
>> a quick op after
>>    the class is already initialized. Also, JavaCalls::call_static 
>> also internally call
>>    into InstanceKlass->initialize, so I am just following the 
>> existing pattern as Coleen
>>    mentioned below.
>>
>
> I think I like your last version better.  I don't think 
> JavaCalls::new_instance() can nicely generalize the calls to object 
> init functions that I found around the vm.  I think just doing what 
> you had would be better.  It's only 3 klass->initialize calls. You 
> could make the new_instance() function local to systemDictionaryShared 
> to save code if they are all the same, but I don't see much advantage.
>
> Also a general new_instance() function should have the call to this to 
> be the same as the others (see reflection.cpp).
>
>   klass->check_valid_for_instantiation(false, CHECK_NULL);
>
> If it were possible to replace all klass->allocate_instance() calls 
> with JavaCalls::new_instance(), that seems like the API would be worth 
> it, but it's not possible.   So people can still make mistakes and not 
> call the object init function, like I think someone did in jvm.cpp.
>
>
>> Doing the initialization on demand also means for cases where JAR 
>> manifest is not used
>>    (all code is loaded from the system image or directories), we get 
>> faster start-up.
>>
>> 2. I also took the time to removed a bunch of "// One oop argument" 
>> comments which
>>    probably meant something to the person who wrote it, but seems 
>> useless to everyone
>>    else.
>
> Not sure what that would mean myself :)
>>
>> 3. As Calvin suggested, I removed the File_klass and also 
>> ParseUtil_klass from
>>    the system dictionary since they are not used anywhere. This 
>> hopefully improves start-up
>>    by a little bit, since these 2 classes are no longer resolved at 
>> start-up.
>>
>>
>> (BTW, I changed the RFR subject line from XS to S due to the extend 
>> of change :-)
>>
> Make it S again!

I mean XS!
Coleen

>
> Coleen
>
>> Thanks
>> - Ioi
>>
>>
>>
>>
>> On 5/15/18 2:00 PM, coleen.phillimore at oracle.com wrote:
>>>
>>> http://cr.openjdk.java.net/~iklam/jdk11/8189140-rename-system-dict-shared-initialize.v01/src/hotspot/share/classfile/systemDictionaryShared.cpp.udiff.html 
>>>
>>>
>>> This looks good.  This is a pattern that's used in other places, and 
>>> it would be better to not initialize these at startup in thread.cpp.
>>>
>>> Coleen
>>>
>>> On 5/15/18 2:07 AM, Ioi Lam wrote:
>>>> https://bugs.openjdk.java.net/browse/JDK-8189140
>>>> http://cr.openjdk.java.net/~iklam/jdk11/8189140-rename-system-dict-shared-initialize.v01/ 
>>>>
>>>>
>>>> Summary:
>>>>
>>>> 1. Removed the forced initialization of a few classes used by 
>>>> AppCDS at JVM start-up.
>>>>    Instead, initialize these class on demand by calling 
>>>> InstanceKlass::initialize, which
>>>>    is a quick no-op if the class is already initialized.
>>>>
>>>> 2. The only initialization left is that of a global lock. So I 
>>>> renamed the function
>>>>    to SystemDictionaryShared::initialize_locks().
>>>>
>>>> 3. I moved the call of this function from 
>>>> SystemDictionary::compute_java_loaders() to
>>>> SystemDictionary::initialize() where it seems to fit.
>>>>
>>>> Testing with hs-tiers 1 and 2.
>>>>
>>>> Thanks
>>>> - Ioi
>>>
>>
>



More information about the hotspot-runtime-dev mailing list