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