RFR(S): 8243586: Optimize calls to SystemDictionaryShared::define_shared_package for classpath

Calvin Cheung calvin.cheung at oracle.com
Mon Jun 29 18:36:52 UTC 2020


Hi Yumin,

On 6/29/20 11:21 AM, Yumin Qi wrote:
>
> Hi, Calvin
>
>   Looks good to me.  A minor comment:
>
Thanks for your review.
>
>   test/hotspot/jtreg/runtime/cds/appcds/test-classes/C3.java":
>
>     1 /*
>     2  * Copyright (c) 2014, 2020, Oracle and/or its affiliates. All rights reserved.
>     3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
>     4  *
>
>   This is a new file, the year should be year 2020. Is this a copy 
> problem?
>
>
I've corrected the copyright year in my local repo. I assume that you 
don't need to see another webrev?

thanks,

Calvin

> Thanks
>
> Yumin
>
> On 6/29/20 10:59 AM, Calvin Cheung wrote:
>> Hi Ioi,
>>
>> Thanks for your review.
>>
>> On 6/28/20 6:01 PM, Ioi Lam wrote:
>>> Hi Calvin,
>>>
>>> [1]
>>> I think the following name is too generic and also shouldn't be in 
>>> the global scope. How about moving it into PackageEntry as:
>>>
>>> class PackageEntry ... {
>>>   static int max_index_for_defined_in_class_path() {
>>>     return sizeof(intptr_t) * BitsPerByte;
>>>   }
>>> }
>>>
>>> Also, I think it's better to use "int" as the type of "idx" for 
>>> is_defined_by_cds_in_class_path and set_defined_in_class_path.
>> Added the above static function. I've also renamed the variable to 
>> _defined_by_cds_in_class_path and changed its type to int.
>>>
>>> Both of the above two functions should assert(index < 
>>> max_index_for_defined_in_class_path()).
>> Added the assert to both functions.
>>>
>>>  875       if (index_offset < MAX_BITMAP_BITS) {
>>>  876         if (pkg_entry == NULL || 
>>> !pkg_entry->is_defined_by_cds_in_class_path(index_offset)) {
>>>   >>> add comments about the optimization?
>> Added a comment.
>>>
>>> [2] In the test case:
>>>
>>>   66         // Test loading of two classes from the same package 
>>> from different jars.
>>>   67         // First loaded class is from a non-sealed package, the 
>>> second loaded
>>>   68         // class is from the same package but sealed.
>>>   69         // The expected result is a SecurityException with a 
>>> "sealing violation".
>>>
>>> How about
>>>
>>>   69         // The expected result is a SecurityException with a 
>>> "sealing violation"
>>>              // for the second class.
>>>
>>> and then, check in the output that the first class was successfully 
>>> loaded.
>>>
>>> I think we should also have another test case for:
>>>
>>>          output = TestCommon.exec(jars, "PackageSealingTest",
>>>                                   "sealed/pkg/C1", "sealed", 
>>> "sealed/pkg/C3", "notSealed");
>>>          TestCommon.checkExec(output, ".....");
>>>
>>> in this case, C3 should fail to load.
>>
>> For the above added test, I've used the jar with the sealed package 
>> during dump time so that we can verify the sealed/pkg/C1 class is 
>> loaded from the archive during runtime.
>>
>> updated webrev:
>> http://cr.openjdk.java.net/~ccheung/jdk16/8243586/webrev.01/
>>
>> thanks,
>>
>> Calvin
>>
>>
>>>
>>> Thanks
>>> - Ioi
>>>
>>>
>>>
>>> On 6/24/20 3:53 PM, Calvin Cheung wrote:
>>>> JBS: https://bugs.openjdk.java.net/browse/JDK-8243586
>>>>
>>>> webrev: http://cr.openjdk.java.net/~ccheung/jdk16/8243586/webrev.00/
>>>>
>>>> The proposed change is to reduce the calls to 
>>>> SystemDictionaryShared::define_shared_package which does a java 
>>>> call to AppClassLoader.defineOrCheckPackage. Currently, 
>>>> define_shared_package is called for every shared class but it is 
>>>> needed only for each package in each jar specified in the classpath.
>>>>
>>>> zprint perf results summary:
>>>>
>>>> instr delta = -104380126 -2.2487%
>>>> time delta = -23.779 ms -3.3640%
>>>>
>>>> Testing: running mach5 tier1 and 2 tests.
>>>>
>>>> thanks,
>>>>
>>>> Calvin
>>>>
>>>


More information about the hotspot-runtime-dev mailing list