(S) 8237750: Load libzip.so only if necessary

Yumin Qi yumin.qi at oracle.com
Fri May 1 21:42:17 UTC 2020


Hi, Dean
   Thanks for the review. I will try MutextLocker, for AOT, I think 
currently the tests are not using CDS then it will load classes from 
stream, that will use libzip's Crc32.
   I will check for AOT to see if it really loads libzip with the patch. 
For test compiler/aot/DeoptimizationTest.java:

#0  ClassLoader::load_zip_library () at 
/home/minqi/ws/jdk15/jdk/src/hotspot/share/classfile/classLoader.cpp:978
#1  0x00007ffff57d4693 in ClassLoader::crc32 (crc=0, buf=0x7ffff0244ee0 
"\312\376\272\276", len=1888) at 
/home/minqi/ws/jdk15/jdk/src/hotspot/share/classfile/classLoader.cpp:1028
#2  0x00007ffff57cef5d in ClassFileStream::compute_fingerprint 
(this=0x7ffff0245640) at 
/home/minqi/ws/jdk15/jdk/src/hotspot/share/classfile/classFileStream.cpp:80
#3  0x00007ffff57c40ed in ClassFileParser::create_instance_klass 
(this=0x7ffff7fc6fc0, changed_by_loadhook=false, cl_inst_info=..., 
__the_thread__=0x7ffff0033000) at 
/home/minqi/ws/jdk15/jdk/src/hotspot/share/classfile/classFileParser.cpp:5630
#4  0x00007ffff5dea647 in KlassFactory::create_from_stream 
(stream=0x7ffff0245640, name=0x7ffff40550f0, loader_data=0x7ffff022dbc0, 
cl_info=..., __the_thread__=0x7ffff0033000)
     at 
/home/minqi/ws/jdk15/jdk/src/hotspot/share/classfile/klassFactory.cpp:207
#5  0x00007ffff57d53e4 in ClassLoader::load_class (name=0x7ffff40550f0, 
search_append_only=false, __the_thread__=0x7ffff0033000) at 
/home/minqi/ws/jdk15/jdk/src/hotspot/share/classfile/classLoader.cpp:1285
#6  0x00007ffff6234fcf in SystemDictionary::load_instance_class 
(class_name=0x7ffff40550f0, class_loader=..., 
__the_thread__=0x7ffff0033000) at 
/home/minqi/ws/jdk15/jdk/src/hotspot/share/classfile/systemDictionary.cpp:1550
#7  0x00007ffff6232d0a in 
SystemDictionary::resolve_instance_class_or_null (name=0x7ffff40550f0, 
class_loader=..., protection_domain=..., __the_thread__=0x7ffff0033000)
     at 
/home/minqi/ws/jdk15/jdk/src/hotspot/share/classfile/systemDictionary.cpp:882
#8  0x00007ffff623137e in 
SystemDictionary::resolve_instance_class_or_null_helper 
(class_name=0x7ffff40550f0, class_loader=..., protection_domain=..., 
__the_thread__=0x7ffff0033000)
     at 
/home/minqi/ws/jdk15/jdk/src/hotspot/share/classfile/systemDictionary.cpp:302
#9  0x00007ffff623124c in SystemDictionary::resolve_or_null 
(class_name=0x7ffff40550f0, class_loader=..., protection_domain=..., 
__the_thread__=0x7ffff0033000) at 
/home/minqi/ws/jdk15/jdk/src/hotspot/share/classfile/systemDictionary.cpp:285
#10 0x00007ffff6230f57 in SystemDictionary::resolve_or_fail 
(class_name=0x7ffff40550f0, class_loader=..., protection_domain=..., 
throw_error=true, __the_thread__=0x7ffff0033000)
     at 
/home/minqi/ws/jdk15/jdk/src/hotspot/share/classfile/systemDictionary.cpp:233
#11 0x00007ffff62311eb in SystemDictionary::resolve_or_fail 
(class_name=0x7ffff40550f0, throw_error=true, 
__the_thread__=0x7ffff0033000) at 
/home/minqi/ws/jdk15/jdk/src/hotspot/share/classfile/systemDictionary.cpp:275
#12 0x00007ffff6236722 in SystemDictionary::resolve_wk_klass 
(id=SystemDictionary::Object_klass_knum, __the_thread__=0x7ffff0033000) 
at 
/home/minqi/ws/jdk15/jdk/src/hotspot/share/classfile/systemDictionary.cpp:2029
#13 0x00007ffff623681e in SystemDictionary::resolve_wk_klasses_until 
(limit_id=SystemDictionary::Cloneable_klass_knum, 
start_id=@0x7ffff7fc79d4: SystemDictionary::Object_klass_knum, 
__the_thread__=0x7ffff0033000)
     at 
/home/minqi/ws/jdk15/jdk/src/hotspot/share/classfile/systemDictionary.cpp:2039
#14 0x00007ffff623ac01 in SystemDictionary::resolve_wk_klasses_through 
(end_id=SystemDictionary::Class_klass_knum, start_id=@0x7ffff7fc79d4: 
SystemDictionary::Object_klass_knum, __the_thread__=0x7ffff0033000)
     at 
/home/minqi/ws/jdk15/jdk/src/hotspot/share/classfile/systemDictionary.hpp:418
#15 0x00007ffff62369b0 in SystemDictionary::resolve_well_known_classes 
(__the_thread__=0x7ffff0033000) at 
/home/minqi/ws/jdk15/jdk/src/hotspot/share/classfile/systemDictionary.cpp:2082
#16 0x00007ffff6236517 in SystemDictionary::initialize 
(__the_thread__=0x7ffff0033000) at 
/home/minqi/ws/jdk15/jdk/src/hotspot/share/classfile/systemDictionary.cpp:1985
#17 0x00007ffff62afe15 in Universe::genesis 
(__the_thread__=0x7ffff0033000) at 
/home/minqi/ws/jdk15/jdk/src/hotspot/share/memory/universe.cpp:326
#18 0x00007ffff62b1e51 in universe2_init () at 
/home/minqi/ws/jdk15/jdk/src/hotspot/share/memory/universe.cpp:847
#19 0x00007ffff5af21ed in init_globals () at 
/home/minqi/ws/jdk15/jdk/src/hotspot/share/runtime/init.cpp:128
#20 0x00007ffff627feff in Threads::create_vm (args=0x7ffff7fc7e50, 
canTryAgain=0x7ffff7fc7d5b) at 
/home/minqi/ws/jdk15/jdk/src/hotspot/share/runtime/thread.cpp:3879
#21 0x00007ffff5bf537d in JNI_CreateJavaVM_inner (vm=0x7ffff7fc7ea8, 
penv=0x7ffff7fc7eb0, args=0x7ffff7fc7e50) at 
/home/minqi/ws/jdk15/jdk/src/hotspot/share/prims/jni.cpp:3789
#22 0x00007ffff5bf5677 in JNI_CreateJavaVM (vm=0x7ffff7fc7ea8, 
penv=0x7ffff7fc7eb0, args=0x7ffff7fc7e50) at 
/home/minqi/ws/jdk15/jdk/src/hotspot/share/prims/jni.cpp:3872
#23 0x00007ffff7bca4c9 in InitializeJVM (pvm=0x7ffff7fc7ea8, 
penv=0x7ffff7fc7eb0, ifn=0x7ffff7fc7f00) at 
/home/minqi/ws/jdk15/jdk/src/java.base/share/native/libjli/java.c:1538
#24 0x00007ffff7bc70b5 in JavaMain (_args=0x7fffffffab10) at 
/home/minqi/ws/jdk15/jdk/src/java.base/share/native/libjli/java.c:417
#25 0x00007ffff7bceb5f in ThreadJavaMain (args=0x7fffffffab10) at 
/home/minqi/ws/jdk15/jdk/src/java.base/unix/native/libjli/java_md_solinux.c:734
#26 0x00007ffff71c56ba in start_thread (arg=0x7ffff7fc8700) at 
pthread_create.c:333
#27 0x00007ffff790041d in clone () at 
../sysdeps/unix/sysv/linux/x86_64/clone.S:109

This is not with CDS.

Thanks
Yumin

On 5/1/20 2:11 PM, Dean Long wrote:
> It looks like Zip_lock could be a MutexLocker instead of a MonitorLocker.
>
> dl
>
> On 5/1/20 10:24 AM, Yumin Qi wrote:
>> Hi, please review:
>> bug 8237750: https://bugs.openjdk.java.net/browse/JDK-8237750
>> webrev: http://cr.openjdk.java.net/~minqi/8237750/webrev-01/
>> Summary:
>>   zip library is loaded unconditionally at start up but it is only 
>> needed when
>>   1) bootclasspath contains zip or
>>   2) UseAOT enabled or
>>   3) VerifySharedArchive turned on or
>>   4) CDS archives custom loaded classes
>>    If none of above in java application, it is not necessary to have 
>> zip library loaded.
>>
>>   Solution by loading zip library on demand when needed.
>>
>> Performance for java -Xint version:
>>
>> Results of " perf stat -r 50 bin/java -Xshare:on 
>> -XX:SharedArchiveFile=jdk2.jsa -Xint -version "
>>    1:     59611556    59450206 (-161350)      -----     39.799 40.274 
>> (  0.475)    ++
>>    2:     59602708    59425234 (-177474)      -----     40.591 41.183 
>> (  0.592)    ++
>>    3:     59579718    59441272 (-138446)      ----      40.777 40.471 
>> ( -0.306)      -
>>    4:     59584882    59410155 (-174727)      -----     40.824 40.233 
>> ( -0.591)      --
>>    5:     59590998    59447252 (-143746)      ----      40.400 40.493 
>> (  0.093)
>>    6:     59589523    59441934 (-147589)      ----      40.475 40.064 
>> ( -0.411)      --
>>    7:     59581820    59413612 (-168208)      -----     39.763 40.077 
>> (  0.314)     +
>>    8:     59593678    59418738 (-174940)      -----     40.912 39.724 
>> ( -1.188)      -----
>>    9:     59573058    59412554 (-160504)      -----     40.126 40.033 
>> ( -0.093)
>>   10:     59591469    59419291 (-172178)      -----     40.731 40.689 
>> ( -0.042)
>> ============================================================
>>           59589940    59428022 (-161917)      -----     40.438 40.322 
>> ( -0.116)
>> instr delta =      -161917    -0.2717%
>> time  delta =       -0.116 ms -0.2859%
>>
>> Tests: hs-tier1-4.
>> Due to zip library not loaded at default, I removed 'zip' from pmap 
>> list in test case: *test/hotspot/jtreg/serviceability/sa/ClhsdbPmap.java
>>
>> **
>> * Thanks
>> Yumin
>



More information about the hotspot-runtime-dev mailing list