< prev index next > src/hotspot/share/cds/dynamicArchive.cpp
Print this page
void DynamicArchiveBuilder::gather_array_klasses() {
for (int i = 0; i < klasses()->length(); i++) {
if (klasses()->at(i)->is_objArray_klass()) {
ObjArrayKlass* oak = ObjArrayKlass::cast(klasses()->at(i));
+ if (oak->is_refined_objArray_klass()) {
+ oak = ObjArrayKlass::cast(oak->super());
+ }
Klass* elem = oak->element_klass();
if (MetaspaceShared::is_shared_static(elem)) {
// Only capture the array klass whose element_klass is in the static archive.
// During run time, setup (see DynamicArchive::setup_array_klasses()) is needed
// so that the element_klass can find its array klasses from the dynamic archive.
ObjArrayKlass* oak = _dynamic_archive_array_klasses->at(i);
assert(!oak->is_typeArray_klass(), "all type array classes must be in static archive");
Klass* elm = oak->element_klass();
assert(MetaspaceShared::is_shared_static((void*)elm), "must be");
!
! if (elm->is_instance_klass()) {
! assert(InstanceKlass::cast(elm)->array_klasses() == nullptr, "must be");
! InstanceKlass::cast(elm)->set_array_klasses(oak);
! } else {
! assert(elm->is_array_klass(), "sanity");
! assert(ArrayKlass::cast(elm)->higher_dimension() == nullptr, "must be");
! ArrayKlass::cast(elm)->set_higher_dimension(oak);
}
}
log_debug(aot)("Total array klasses read from dynamic archive: %d", _dynamic_archive_array_klasses->length());
}
}
ObjArrayKlass* oak = _dynamic_archive_array_klasses->at(i);
assert(!oak->is_typeArray_klass(), "all type array classes must be in static archive");
Klass* elm = oak->element_klass();
assert(MetaspaceShared::is_shared_static((void*)elm), "must be");
! // Higher dimension may have been set when doing setup on ObjArrayKlass
! if (!oak->is_refined_objArray_klass()) {
! if (elm->is_instance_klass()) {
! assert(InstanceKlass::cast(elm)->array_klasses() == nullptr, "must be");
! InstanceKlass::cast(elm)->set_array_klasses(oak);
! } else {
! assert(elm->is_array_klass(), "sanity");
! assert(ArrayKlass::cast(elm)->higher_dimension() == nullptr, "must be");
+ ArrayKlass::cast(elm)->set_higher_dimension(oak);
+ }
}
}
log_debug(aot)("Total array klasses read from dynamic archive: %d", _dynamic_archive_array_klasses->length());
}
}
< prev index next >