228 Array<ModuleEntry*>* archived_qualified_exports = ModuleEntry::write_archived_entry_array(_qualified_exports);
229
230 set_next(NULL);
231 set_literal(MetaspaceShared::get_relocated_symbol(literal()));
232 set_hash(0x0); // re-init at runtime
233 _module = ModuleEntry::get_archived_entry(_module);
234 _qualified_exports = (GrowableArray<ModuleEntry*>*)archived_qualified_exports;
235 _defined_by_cds_in_class_path = 0;
236
237 ArchivePtrMarker::mark_pointer((address*)literal_addr());
238 ArchivePtrMarker::mark_pointer((address*)&_module);
239 ArchivePtrMarker::mark_pointer((address*)&_qualified_exports);
240 }
241
242 void PackageEntry::load_from_archive() {
243 _qualified_exports = ModuleEntry::read_archived_entry_array((Array<ModuleEntry*>*)_qualified_exports);
244 JFR_ONLY(INIT_ID(this);)
245 }
246
247 static int compare_package_by_name(PackageEntry* a, PackageEntry* b) {
248 return a->name()->fast_compare(b->name());
249 }
250
251 Array<PackageEntry*>* PackageEntryTable::allocate_archived_entries() {
252 // First count the packages in named modules
253 int n, i;
254 for (n = 0, i = 0; i < table_size(); ++i) {
255 for (PackageEntry* p = bucket(i); p != NULL; p = p->next()) {
256 if (p->module()->name() != NULL) {
257 n++;
258 }
259 }
260 }
261
262 Array<PackageEntry*>* archived_packages = MetaspaceShared::new_rw_array<PackageEntry*>(n);
263 for (n = 0, i = 0; i < table_size(); ++i) {
264 for (PackageEntry* p = bucket(i); p != NULL; p = p->next()) {
265 if (p->module()->name() != NULL) {
266 // We don't archive unnamed modules, or packages in unnamed modules. They will be
267 // created on-demand at runtime as classes in such packages are loaded.
|
228 Array<ModuleEntry*>* archived_qualified_exports = ModuleEntry::write_archived_entry_array(_qualified_exports);
229
230 set_next(NULL);
231 set_literal(MetaspaceShared::get_relocated_symbol(literal()));
232 set_hash(0x0); // re-init at runtime
233 _module = ModuleEntry::get_archived_entry(_module);
234 _qualified_exports = (GrowableArray<ModuleEntry*>*)archived_qualified_exports;
235 _defined_by_cds_in_class_path = 0;
236
237 ArchivePtrMarker::mark_pointer((address*)literal_addr());
238 ArchivePtrMarker::mark_pointer((address*)&_module);
239 ArchivePtrMarker::mark_pointer((address*)&_qualified_exports);
240 }
241
242 void PackageEntry::load_from_archive() {
243 _qualified_exports = ModuleEntry::read_archived_entry_array((Array<ModuleEntry*>*)_qualified_exports);
244 JFR_ONLY(INIT_ID(this);)
245 }
246
247 static int compare_package_by_name(PackageEntry* a, PackageEntry* b) {
248 assert(a == b || a->name() != b->name(), "no duplicated names");
249 return a->name()->fast_compare(b->name());
250 }
251
252 Array<PackageEntry*>* PackageEntryTable::allocate_archived_entries() {
253 // First count the packages in named modules
254 int n, i;
255 for (n = 0, i = 0; i < table_size(); ++i) {
256 for (PackageEntry* p = bucket(i); p != NULL; p = p->next()) {
257 if (p->module()->name() != NULL) {
258 n++;
259 }
260 }
261 }
262
263 Array<PackageEntry*>* archived_packages = MetaspaceShared::new_rw_array<PackageEntry*>(n);
264 for (n = 0, i = 0; i < table_size(); ++i) {
265 for (PackageEntry* p = bucket(i); p != NULL; p = p->next()) {
266 if (p->module()->name() != NULL) {
267 // We don't archive unnamed modules, or packages in unnamed modules. They will be
268 // created on-demand at runtime as classes in such packages are loaded.
|