< prev index next >

src/hotspot/share/classfile/javaClasses.cpp

Print this page




1021         oop o = _m()->obj_field(fd->offset());
1022         _m()->obj_field_put(fd->offset(), NULL);
1023         break;
1024       }
1025       default:
1026         ShouldNotReachHere();
1027         break;
1028      }
1029   }
1030 };
1031 
1032 void java_lang_Class::archive_basic_type_mirrors(TRAPS) {
1033   assert(MetaspaceShared::is_heap_object_archiving_allowed(),
1034          "MetaspaceShared::is_heap_object_archiving_allowed() must be true");
1035 
1036   for (int t = 0; t <= T_VOID; t++) {
1037     oop m = Universe::_mirrors[t];
1038     if (m != NULL) {
1039       // Update the field at _array_klass_offset to point to the relocated array klass.
1040       oop archived_m = MetaspaceShared::archive_heap_object(m, THREAD);

1041       Klass *ak = (Klass*)(archived_m->metadata_field(_array_klass_offset));
1042       assert(ak != NULL || t == T_VOID, "should not be NULL");
1043       if (ak != NULL) {
1044         Klass *reloc_ak = MetaspaceShared::get_relocated_klass(ak);
1045         archived_m->metadata_field_put(_array_klass_offset, reloc_ak);
1046       }
1047 
1048       // Clear the fields. Just to be safe
1049       Klass *k = m->klass();
1050       Handle archived_mirror_h(THREAD, archived_m);
1051       ResetMirrorField reset(archived_mirror_h);
1052       InstanceKlass::cast(k)->do_nonstatic_fields(&reset);
1053 
1054       log_trace(cds, heap, mirror)(
1055         "Archived %s mirror object from " PTR_FORMAT " ==> " PTR_FORMAT,
1056         type2name((BasicType)t), p2i(Universe::_mirrors[t]), p2i(archived_m));
1057 
1058       Universe::_mirrors[t] = archived_m;
1059     }
1060   }




1021         oop o = _m()->obj_field(fd->offset());
1022         _m()->obj_field_put(fd->offset(), NULL);
1023         break;
1024       }
1025       default:
1026         ShouldNotReachHere();
1027         break;
1028      }
1029   }
1030 };
1031 
1032 void java_lang_Class::archive_basic_type_mirrors(TRAPS) {
1033   assert(MetaspaceShared::is_heap_object_archiving_allowed(),
1034          "MetaspaceShared::is_heap_object_archiving_allowed() must be true");
1035 
1036   for (int t = 0; t <= T_VOID; t++) {
1037     oop m = Universe::_mirrors[t];
1038     if (m != NULL) {
1039       // Update the field at _array_klass_offset to point to the relocated array klass.
1040       oop archived_m = MetaspaceShared::archive_heap_object(m, THREAD);
1041       assert(archived_m != NULL, "sanity");
1042       Klass *ak = (Klass*)(archived_m->metadata_field(_array_klass_offset));
1043       assert(ak != NULL || t == T_VOID, "should not be NULL");
1044       if (ak != NULL) {
1045         Klass *reloc_ak = MetaspaceShared::get_relocated_klass(ak);
1046         archived_m->metadata_field_put(_array_klass_offset, reloc_ak);
1047       }
1048 
1049       // Clear the fields. Just to be safe
1050       Klass *k = m->klass();
1051       Handle archived_mirror_h(THREAD, archived_m);
1052       ResetMirrorField reset(archived_mirror_h);
1053       InstanceKlass::cast(k)->do_nonstatic_fields(&reset);
1054 
1055       log_trace(cds, heap, mirror)(
1056         "Archived %s mirror object from " PTR_FORMAT " ==> " PTR_FORMAT,
1057         type2name((BasicType)t), p2i(Universe::_mirrors[t]), p2i(archived_m));
1058 
1059       Universe::_mirrors[t] = archived_m;
1060     }
1061   }


< prev index next >