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() {
|