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.
|