< prev index next >

src/hotspot/share/classfile/classLoaderDataShared.cpp

Print this page

105 void ArchivedClassLoaderData::remove_unshareable_info() {
106   if (_packages != nullptr) {
107     _packages = ArchiveBuilder::current()->get_buffered_addr(_packages);
108     for (int i = 0; i < _packages->length(); i++) {
109       _packages->at(i)->remove_unshareable_info();
110     }
111   }
112   if (_modules != nullptr) {
113     _modules = ArchiveBuilder::current()->get_buffered_addr(_modules);
114     for (int i = 0; i < _modules->length(); i++) {
115       _modules->at(i)->remove_unshareable_info();
116     }
117   }
118   if (_unnamed_module != nullptr) {
119     _unnamed_module = ArchiveBuilder::current()->get_buffered_addr(_unnamed_module);
120     _unnamed_module->remove_unshareable_info();
121   }
122 }
123 
124 void ArchivedClassLoaderData::restore(ClassLoaderData* loader_data, bool do_entries, bool do_oops) {
125   assert(CDSConfig::is_using_archive(), "must be");
126   assert_valid(loader_data);
127   if (_modules != nullptr) { // Could be null if we have archived no modules for platform/system loaders
128     ModuleEntryTable* modules = loader_data->modules();
129     PackageEntryTable* packages = loader_data->packages();
130 
131     MutexLocker m1(Module_lock);
132     if (do_entries) {
133       modules->load_archived_entries(loader_data, _modules);
134       packages->load_archived_entries(_packages);
135     }
136     if (do_oops) {
137       modules->restore_archived_oops(loader_data, _modules);
138       if (_unnamed_module != nullptr) {
139         oop module_oop = _unnamed_module->module_oop();
140         assert(module_oop != nullptr, "must be already set");
141         assert(_unnamed_module == java_lang_Module::module_entry(module_oop), "must be already set");
142         assert(loader_data->class_loader() == java_lang_Module::loader(module_oop), "must be set in dump time");
143       }
144     }
145   }
146 }
147 
148 void ArchivedClassLoaderData::clear_archived_oops() {
149   assert(CDSConfig::is_using_archive(), "must be");
150   if (_modules != nullptr) {
151     for (int i = 0; i < _modules->length(); i++) {
152       _modules->at(i)->clear_archived_oops();
153     }
154     if (_unnamed_module != nullptr) {
155       _unnamed_module->clear_archived_oops();
156     }
157   }
158 }
159 
160 // ------------------------------
161 
162 void ClassLoaderDataShared::load_archived_platform_and_system_class_loaders() {
163   // The streaming object loader prefers loading the class loader related objects before
164   //  the CLD constructor which has a NoSafepointVerifier.
165   if (!HeapShared::is_loading_streaming_mode()) {
166     return;
167   }
168 
169   // Ensure these class loaders are eagerly materialized before their CLDs are created.

105 void ArchivedClassLoaderData::remove_unshareable_info() {
106   if (_packages != nullptr) {
107     _packages = ArchiveBuilder::current()->get_buffered_addr(_packages);
108     for (int i = 0; i < _packages->length(); i++) {
109       _packages->at(i)->remove_unshareable_info();
110     }
111   }
112   if (_modules != nullptr) {
113     _modules = ArchiveBuilder::current()->get_buffered_addr(_modules);
114     for (int i = 0; i < _modules->length(); i++) {
115       _modules->at(i)->remove_unshareable_info();
116     }
117   }
118   if (_unnamed_module != nullptr) {
119     _unnamed_module = ArchiveBuilder::current()->get_buffered_addr(_unnamed_module);
120     _unnamed_module->remove_unshareable_info();
121   }
122 }
123 
124 void ArchivedClassLoaderData::restore(ClassLoaderData* loader_data, bool do_entries, bool do_oops) {
125   assert(CDSConfig::is_using_full_module_graph(), "must be");
126   assert_valid(loader_data);
127   if (_modules != nullptr) { // Could be null if we have archived no modules for platform/system loaders
128     ModuleEntryTable* modules = loader_data->modules();
129     PackageEntryTable* packages = loader_data->packages();
130 
131     MutexLocker m1(Module_lock);
132     if (do_entries) {
133       modules->load_archived_entries(loader_data, _modules);
134       packages->load_archived_entries(_packages);
135     }
136     if (do_oops) {
137       modules->restore_archived_oops(loader_data, _modules);
138       if (_unnamed_module != nullptr) {
139         oop module_oop = _unnamed_module->module_oop();
140         assert(module_oop != nullptr, "must be already set");
141         assert(_unnamed_module == java_lang_Module::module_entry(module_oop), "must be already set");
142         assert(loader_data->class_loader() == java_lang_Module::loader(module_oop), "must be set in dump time");
143       }
144     }
145   }
146 }
147 
148 void ArchivedClassLoaderData::clear_archived_oops() {
149   assert(!CDSConfig::is_using_full_module_graph(), "must be");
150   if (_modules != nullptr) {
151     for (int i = 0; i < _modules->length(); i++) {
152       _modules->at(i)->clear_archived_oops();
153     }
154     if (_unnamed_module != nullptr) {
155       _unnamed_module->clear_archived_oops();
156     }
157   }
158 }
159 
160 // ------------------------------
161 
162 void ClassLoaderDataShared::load_archived_platform_and_system_class_loaders() {
163   // The streaming object loader prefers loading the class loader related objects before
164   //  the CLD constructor which has a NoSafepointVerifier.
165   if (!HeapShared::is_loading_streaming_mode()) {
166     return;
167   }
168 
169   // Ensure these class loaders are eagerly materialized before their CLDs are created.
< prev index next >