(RFR) 8240245: Avoid calling is_shared_class_visible() in SystemDictionary::load_shared_class()
Calvin Cheung
calvin.cheung at oracle.com
Mon Jun 1 18:21:48 UTC 2020
Hi Yumin,
In additional to Ioi's comments:
1272 #ifdef ASSERT
1273 if (!cont) {
1274 assert(SystemDictionary::is_shared_class_visible_impl(class_name,
ik, pkg_entry, class_loader, THREAD), "Sanity check");
1275 }
1276 #endif
1277 if (!cont) {
1278 return true;
1279 }
Can you combine the above into a single "if (!cont)" block?
-----
In the test:
201 .shouldNotContain("--module-path = " + mjars);
Why the "--module-path" is not in the output if CDS is disabled?
thanks,
Calvin
On 6/1/20 10:37 AM, Ioi Lam wrote:
> 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