< prev index next >

src/hotspot/share/classfile/moduleEntry.cpp

Print this page


 470   set_loader_data(loader_data);
 471   _reads = read_archived_entry_array((Array<ModuleEntry*>*)_reads);
 472   JFR_ONLY(INIT_ID(this);)
 473 }
 474 
 475 void ModuleEntry::restore_archive_oops(ClassLoaderData* loader_data) {
 476   Handle module_handle(Thread::current(), HeapShared::materialize_archived_object(_archived_module_narrow_oop));
 477   assert(module_handle.not_null(), "huh");
 478   set_module(loader_data->add_handle(module_handle));
 479 
 480   // This was cleared to zero during dump time -- we didn't save the value
 481   // because it may be affected by archive relocation.
 482   java_lang_Module::set_module_entry(module_handle(), this);
 483 
 484   if (loader_data->class_loader() != NULL) {
 485     java_lang_Module::set_loader(module_handle(), loader_data->class_loader());
 486   }
 487 }
 488 
 489 static int compare_module_by_name(ModuleEntry* a, ModuleEntry* b) {

 490   return a->name()->fast_compare(b->name());
 491 }
 492 
 493 Array<ModuleEntry*>* ModuleEntryTable::allocate_archived_entries() {
 494   Array<ModuleEntry*>* archived_modules = MetaspaceShared::new_rw_array<ModuleEntry*>(number_of_entries());
 495   int n = 0;
 496   for (int i = 0; i < table_size(); ++i) {
 497     for (ModuleEntry* m = bucket(i); m != NULL; m = m->next()) {
 498       archived_modules->at_put(n++, m);
 499     }
 500   }
 501   if (n > 1) {
 502     // Always allocate in the same order to produce deterministic archive.
 503     QuickSort::sort(archived_modules->data(), n, (_sort_Fn)compare_module_by_name, true);
 504   }
 505   for (int i = 0; i < n; i++) {
 506     archived_modules->at_put(i, archived_modules->at(i)->allocate_archived_entry());
 507     ArchivePtrMarker::mark_pointer((address*)archived_modules->adr_at(i));
 508   }
 509   return archived_modules;




 470   set_loader_data(loader_data);
 471   _reads = read_archived_entry_array((Array<ModuleEntry*>*)_reads);
 472   JFR_ONLY(INIT_ID(this);)
 473 }
 474 
 475 void ModuleEntry::restore_archive_oops(ClassLoaderData* loader_data) {
 476   Handle module_handle(Thread::current(), HeapShared::materialize_archived_object(_archived_module_narrow_oop));
 477   assert(module_handle.not_null(), "huh");
 478   set_module(loader_data->add_handle(module_handle));
 479 
 480   // This was cleared to zero during dump time -- we didn't save the value
 481   // because it may be affected by archive relocation.
 482   java_lang_Module::set_module_entry(module_handle(), this);
 483 
 484   if (loader_data->class_loader() != NULL) {
 485     java_lang_Module::set_loader(module_handle(), loader_data->class_loader());
 486   }
 487 }
 488 
 489 static int compare_module_by_name(ModuleEntry* a, ModuleEntry* b) {
 490   assert(a == b || a->name() != b->name(), "no duplicated names");
 491   return a->name()->fast_compare(b->name());
 492 }
 493 
 494 Array<ModuleEntry*>* ModuleEntryTable::allocate_archived_entries() {
 495   Array<ModuleEntry*>* archived_modules = MetaspaceShared::new_rw_array<ModuleEntry*>(number_of_entries());
 496   int n = 0;
 497   for (int i = 0; i < table_size(); ++i) {
 498     for (ModuleEntry* m = bucket(i); m != NULL; m = m->next()) {
 499       archived_modules->at_put(n++, m);
 500     }
 501   }
 502   if (n > 1) {
 503     // Always allocate in the same order to produce deterministic archive.
 504     QuickSort::sort(archived_modules->data(), n, (_sort_Fn)compare_module_by_name, true);
 505   }
 506   for (int i = 0; i < n; i++) {
 507     archived_modules->at_put(i, archived_modules->at(i)->allocate_archived_entry());
 508     ArchivePtrMarker::mark_pointer((address*)archived_modules->adr_at(i));
 509   }
 510   return archived_modules;


< prev index next >