< prev index next >

src/hotspot/share/classfile/classLoaderDataShared.cpp

Print this page

 87   if (loader_data != nullptr) {
 88     // We can't create hashtables at dump time because the hashcode depends on the
 89     // address of the Symbols, which may be relocated at runtime due to ASLR.
 90     // So we store the packages/modules in Arrays. At runtime, we create
 91     // the hashtables using these arrays.
 92     _packages = loader_data->packages()->allocate_archived_entries();
 93     _modules  = loader_data->modules() ->allocate_archived_entries();
 94   }
 95 }
 96 
 97 void ArchivedClassLoaderData::init_archived_entries(ClassLoaderData* loader_data) {
 98   assert(CDSConfig::is_dumping_full_module_graph(), "must be");
 99   assert_valid(loader_data);
100   if (loader_data != nullptr) {
101     loader_data->packages()->init_archived_entries(_packages);
102     loader_data->modules() ->init_archived_entries(_modules);
103   }
104 }
105 
106 void ArchivedClassLoaderData::restore(ClassLoaderData* loader_data, bool do_entries, bool do_oops) {
107   assert(CDSConfig::is_using_archive(), "must be");
108   assert_valid(loader_data);
109   if (_modules != nullptr) { // Could be null if we have archived no modules for platform/system loaders
110     ModuleEntryTable* modules = loader_data->modules();
111     PackageEntryTable* packages = loader_data->packages();
112 
113     MutexLocker m1(Module_lock);
114     if (do_entries) {
115       modules->load_archived_entries(loader_data, _modules);
116       packages->load_archived_entries(_packages);
117     }
118     if (do_oops) {
119       modules->restore_archived_oops(loader_data, _modules);
120     }
121   }
122 }
123 
124 void ArchivedClassLoaderData::clear_archived_oops() {
125   assert(CDSConfig::is_using_archive(), "must be");
126   if (_modules != nullptr) {
127     for (int i = 0; i < _modules->length(); i++) {
128       _modules->at(i)->clear_archived_oops();
129     }
130   }
131 }
132 
133 // ------------------------------
134 
135 static ClassLoaderData* null_class_loader_data() {
136   ClassLoaderData* loader_data = ClassLoaderData::the_null_class_loader_data();
137   assert(loader_data != nullptr, "must be");
138   return loader_data;
139 }
140 
141 static ClassLoaderData* java_platform_loader_data_or_null() {
142   return ClassLoaderData::class_loader_data_or_null(SystemDictionary::java_platform_loader());
143 }
144 
145 static ClassLoaderData* java_system_loader_data_or_null() {

 87   if (loader_data != nullptr) {
 88     // We can't create hashtables at dump time because the hashcode depends on the
 89     // address of the Symbols, which may be relocated at runtime due to ASLR.
 90     // So we store the packages/modules in Arrays. At runtime, we create
 91     // the hashtables using these arrays.
 92     _packages = loader_data->packages()->allocate_archived_entries();
 93     _modules  = loader_data->modules() ->allocate_archived_entries();
 94   }
 95 }
 96 
 97 void ArchivedClassLoaderData::init_archived_entries(ClassLoaderData* loader_data) {
 98   assert(CDSConfig::is_dumping_full_module_graph(), "must be");
 99   assert_valid(loader_data);
100   if (loader_data != nullptr) {
101     loader_data->packages()->init_archived_entries(_packages);
102     loader_data->modules() ->init_archived_entries(_modules);
103   }
104 }
105 
106 void ArchivedClassLoaderData::restore(ClassLoaderData* loader_data, bool do_entries, bool do_oops) {
107   assert(CDSConfig::is_using_full_module_graph(), "must be");
108   assert_valid(loader_data);
109   if (_modules != nullptr) { // Could be null if we have archived no modules for platform/system loaders
110     ModuleEntryTable* modules = loader_data->modules();
111     PackageEntryTable* packages = loader_data->packages();
112 
113     MutexLocker m1(Module_lock);
114     if (do_entries) {
115       modules->load_archived_entries(loader_data, _modules);
116       packages->load_archived_entries(_packages);
117     }
118     if (do_oops) {
119       modules->restore_archived_oops(loader_data, _modules);
120     }
121   }
122 }
123 
124 void ArchivedClassLoaderData::clear_archived_oops() {
125   assert(!CDSConfig::is_using_full_module_graph(), "must be");
126   if (_modules != nullptr) {
127     for (int i = 0; i < _modules->length(); i++) {
128       _modules->at(i)->clear_archived_oops();
129     }
130   }
131 }
132 
133 // ------------------------------
134 
135 static ClassLoaderData* null_class_loader_data() {
136   ClassLoaderData* loader_data = ClassLoaderData::the_null_class_loader_data();
137   assert(loader_data != nullptr, "must be");
138   return loader_data;
139 }
140 
141 static ClassLoaderData* java_platform_loader_data_or_null() {
142   return ClassLoaderData::class_loader_data_or_null(SystemDictionary::java_platform_loader());
143 }
144 
145 static ClassLoaderData* java_system_loader_data_or_null() {
< prev index next >