(RFR) 8240245: Avoid calling is_shared_class_visible() in SystemDictionary::load_shared_class()

Ioi Lam ioi.lam at oracle.com
Mon Jun 1 17:37:05 UTC 2020


Hi Yumin,

I think this check in the old code will be unintentionally skipped by 
your change:

   int path_index = ik->shared_classpath_index();
   ClassLoaderData* loader_data = class_loader_data(class_loader);
   if (path_index < 0) {
     // path_index < 0 indicates that the class is intended for a custom 
loader
     // and should not be loaded by boot/platform/app loaders
     if (loader_data->is_builtin_class_loader_data()) {
       return false;
     } else {
       return true;
     }
   }

I think your optimization should be done after this check.

------------------

1239 // Check if
1240 //   1) -Xbootclasspath/a: specified or
1241 //   2) --module-path at runtime
1242 // so avoid checking class visibility for builtin loaders.
1243 bool continue_check_shared_class_visibility() {

How about changing the function names and comments to:

1239 // Need to do the expensive visibility check for builtin loader only if
1240 //   1) -Xbootclasspath/a: specified or
1241 //   2) --module-path at runtime
1243 bool need_to_check_builtin_shared_class_visibility() {
        ....
      }

      bool SystemDictionary::check_builtin_shared_class_visibility(...) {
        assert(ik->shared_classpath_index() >= 0, "must be built-in class");
        assert(loader_data->is_builtin_class_loader_data(), "must be 
built-in loader");
        ...
------------------

Also, the "ResourceMark rm(THREAD);" can be moved to 
check_builtin_shared_class_visibility.

Thanks
- Ioi



On 5/29/20 9:50 PM, Yumin Qi wrote:
> Hi,
>
>   Please check the updated webrev at: 
> http://cr.openjdk.java.net/~minqi/2020/8240245/webrev-01/
>   In this version, test case 
> test/hotspot/jtreg/runtime/cds/appcds/jigsaw/modulepath/ModulePathAndCP.java
>   modfied/added cases to reflect --module-path used at runtime.
>
>   Thanks
>   Yumin*
> *
> On 5/22/20 8:45 AM, Yumin Qi wrote:
>> Hi, Please review
>>
>>   bug: 8240245: https://bugs.openjdk.java.net/browse/JDK-8240245
>>   Webrev: http://cr.openjdk.java.net/~minqi/2020/8240245/webrev-00/
>>
>> Summary: When -Xbootclasspath/a: and --module-path are not specified, 
>> for bultin loaders, is_shared_class_visible will always return true 
>> so we can skip such check. Another optimization is guarding the call 
>> to load_shared_class with UseSharedSpaces, save unnecessary calls for 
>> non-shared run.
>>
>> For java -version, the performance data:
>>
>> Results of " perf stat -r 40 bin/java -Xshare:on 
>> -XX:SharedArchiveFile=jdk2.jsa -Xint -version "
>>    1:     59008853    59008564 (  -289)                41.100 40.342 
>> ( -0.758)      --
>>    2:     58983285    59026645 ( 43360)  ++++          39.841 40.708 
>> (  0.867)    ++
>>    3:     59008801    59005425 ( -3376)                39.903 40.881 
>> (  0.978)   +++
>>    4:     59032045    58990500 (-41545)      ----      39.809 40.443 
>> (  0.634)    ++
>>    5:     59029813    58976124 (-53689)      -----     40.121 39.238 
>> ( -0.883)      --
>>    6:     59036617    58998279 (-38338)      ----      40.644 39.875 
>> ( -0.769)      --
>>    7:     59003768    59005109 (  1341)                39.416 38.991 
>> ( -0.425)      -
>>    8:     58972545    58985824 ( 13279)     +          40.811 40.001 
>> ( -0.810)      --
>>    9:     59007110    58981883 (-25227)      --        40.969 39.090 
>> ( -1.879)      -----
>>   10:     58992934    58987333 ( -5601)      -         40.521 40.371 
>> ( -0.150)
>> ============================================================
>>           59007573    58996566 (-11006)      -         40.310 39.989 
>> ( -0.321)      -
>> instr delta =       -11006    -0.0187%
>> time  delta =       -0.321 ms -0.7966%
>>
>> Tests:  tier1,tier2
>>
>> Thanks
>> Yumin
>



More information about the hotspot-runtime-dev mailing list