JDK-8187119 : Consolidate record_shared_class_loader_type() and record_result()
Type:Enhancement
Component:hotspot
Sub-Component:runtime
Affected Version:10
Priority:P3
Status:Resolved
Resolution:Fixed
Submitted:2017-09-01
Updated:2019-05-22
Resolved:2017-11-20
The Version table provides details related to the release that this issue/RFE will be addressed.
Unresolved : Release in which this issue/RFE will be addressed. Resolved: Release in which this issue/RFE has been resolved. Fixed : Release in which this issue/RFE has been fixed. The release containing this fix may be available for download as an Early Access Release or a General Availability Release.
The ClassLoader::record_shared_class_loader_type() and ClassLoaderExt::record_result() record dump time information for archived classes. The code needs to be consolidated and cleaned up.
Comments
The ClassLoader::add_package() call should be separated from ClassLoaderExt::record_result() as it complicates the code in ClassLoaderExt::record_result() unnecessary.
ClassLoader::add_package() only needs to be done for system classes loaded by the boot class loader. ClassLoaderExt::record_result() are done for all classes (boot, platform, app, etc) at dump time.
25-10-2017
Currently, ClassLoaderExt::record_result() is done twice for classes loaded by the boot class loader. See following two call stacks. The extra ClassLoaderExt::record_result() should be eliminated.
Call stack 1:
#0 ClassLoaderExt::record_result (context=0x7ffff7fd6dd0, class_name=0x7ffff7e2e0d0,
#1 0x00007ffff5a9c802 in ClassLoaderExt::Context::record_result (this=0x7ffff7fd6dd0,
#2 0x00007ffff5a98eff in ClassLoader::record_shared_classpath_index_and_loader (ik=0x8c0000f70,
#3 0x00007ffff61358b8 in KlassFactory::create_from_stream (stream=0x7ffff0021010,
#4 0x00007ffff5a98892 in ClassLoader::load_class (name=0x7ffff7e2e0d0, search_append_only=false,
#5 0x00007ffff650d515 in SystemDictionary::load_instance_class (class_name=0x7ffff7e2e0d0,
#6 0x00007ffff650af39 in SystemDictionary::resolve_instance_class_or_null (name=0x7ffff7e2e0d0,
class_loader=..., protection_domain=..., __the_thread__=0x7ffff001bf70)
Call stack 2:
#0 ClassLoaderExt::record_result (context=0x7ffff7fd7190, class_name=0x7ffff7e2e0d0,
#1 0x00007ffff5a9c802 in ClassLoaderExt::Context::record_result (this=0x7ffff7fd7190,
#2 0x00007ffff5a98918 in ClassLoader::load_class (name=0x7ffff7e2e0d0, search_append_only=false,
#3 0x00007ffff650d515 in SystemDictionary::load_instance_class (class_name=0x7ffff7e2e0d0,
#4 0x00007ffff650af39 in SystemDictionary::resolve_instance_class_or_null (name=0x7ffff7e2e0d0,
#5 0x00007ffff650959b in SystemDictionary::resolve_or_null (class_name=0x7ffff7e2e0d0,
#6 0x00007ffff6508ffe in SystemDictionary::resolve_or_fail (class_name=0x7ffff7e2e0d0,
#7 0x00007ffff650931a in SystemDictionary::resolve_or_fail (class_name=0x7ffff7e2e0d0,