< prev index next >

src/hotspot/share/classfile/classLoaderDataShared.cpp

Print this page

 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() {
< prev index next >