< prev index next >

src/hotspot/share/memory/universe.cpp

Print this page

 556 
 557 void Universe::initialize_basic_type_mirrors(TRAPS) {
 558 #if INCLUDE_CDS_JAVA_HEAP
 559   if (CDSConfig::is_using_archive() &&
 560       HeapShared::is_archived_heap_in_use() &&
 561       _basic_type_mirrors[T_INT].resolve() != nullptr) {
 562     // check that all basic type mirrors are mapped also
 563     for (int i = T_BOOLEAN; i < T_VOID+1; i++) {
 564       if (!is_reference_type((BasicType)i)) {
 565         oop m = _basic_type_mirrors[i].resolve();
 566         assert(m != nullptr, "archived mirrors should not be null");
 567       }
 568     }
 569   } else
 570     // _basic_type_mirrors[T_INT], etc, are null if not using an archived heap
 571 #endif
 572   {
 573     for (int i = T_BOOLEAN; i < T_VOID+1; i++) {
 574       BasicType bt = (BasicType)i;
 575       if (!is_reference_type(bt)) {
 576         oop m = java_lang_Class::create_basic_type_mirror(type2name(bt), bt, CHECK);
 577         _basic_type_mirrors[i] = OopHandle(vm_global(), m);
 578       }
 579       CDS_JAVA_HEAP_ONLY(_archived_basic_type_mirror_indices[i] = -1);
 580     }
 581   }
 582   if (CDSConfig::is_dumping_heap()) {
 583     HeapShared::init_scratch_objects_for_basic_type_mirrors(CHECK);
 584   }
 585 }
 586 
 587 void Universe::fixup_mirrors(TRAPS) {
 588   if (CDSConfig::is_using_aot_linked_classes()) {
 589     // All mirrors of preloaded classes are already restored. No need to fix up.
 590     return;
 591   }
 592 
 593   // Bootstrap problem: all classes gets a mirror (java.lang.Class instance) assigned eagerly,
 594   // but we cannot do that for classes created before java.lang.Class is loaded. Here we simply
 595   // walk over permanent objects created so far (mostly classes) and fixup their mirrors. Note
 596   // that the number of objects allocated at this point is very small.

 556 
 557 void Universe::initialize_basic_type_mirrors(TRAPS) {
 558 #if INCLUDE_CDS_JAVA_HEAP
 559   if (CDSConfig::is_using_archive() &&
 560       HeapShared::is_archived_heap_in_use() &&
 561       _basic_type_mirrors[T_INT].resolve() != nullptr) {
 562     // check that all basic type mirrors are mapped also
 563     for (int i = T_BOOLEAN; i < T_VOID+1; i++) {
 564       if (!is_reference_type((BasicType)i)) {
 565         oop m = _basic_type_mirrors[i].resolve();
 566         assert(m != nullptr, "archived mirrors should not be null");
 567       }
 568     }
 569   } else
 570     // _basic_type_mirrors[T_INT], etc, are null if not using an archived heap
 571 #endif
 572   {
 573     for (int i = T_BOOLEAN; i < T_VOID+1; i++) {
 574       BasicType bt = (BasicType)i;
 575       if (!is_reference_type(bt)) {
 576         oop m = java_lang_Class::create_basic_type_mirror(type2name(bt), bt, false, CHECK);
 577         _basic_type_mirrors[i] = OopHandle(vm_global(), m);
 578       }
 579       CDS_JAVA_HEAP_ONLY(_archived_basic_type_mirror_indices[i] = -1);
 580     }
 581   }
 582   if (CDSConfig::is_dumping_heap()) {
 583     HeapShared::init_scratch_objects_for_basic_type_mirrors(CHECK);
 584   }
 585 }
 586 
 587 void Universe::fixup_mirrors(TRAPS) {
 588   if (CDSConfig::is_using_aot_linked_classes()) {
 589     // All mirrors of preloaded classes are already restored. No need to fix up.
 590     return;
 591   }
 592 
 593   // Bootstrap problem: all classes gets a mirror (java.lang.Class instance) assigned eagerly,
 594   // but we cannot do that for classes created before java.lang.Class is loaded. Here we simply
 595   // walk over permanent objects created so far (mostly classes) and fixup their mirrors. Note
 596   // that the number of objects allocated at this point is very small.
< prev index next >