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.
|