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