RFR(S): 8243586: Optimize calls to SystemDictionaryShared::define_shared_package for classpath
Calvin Cheung
calvin.cheung at oracle.com
Mon Jun 29 17:59:34 UTC 2020
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