src/share/vm/oops/arrayKlassKlass.cpp
Print this page
@@ -102,13 +102,17 @@
int arrayKlassKlass::oop_oop_iterate_m(oop obj, OopClosure* blk, MemRegion mr) {
assert(obj->is_klass(), "must be klass");
arrayKlass* ak = arrayKlass::cast(klassOop(obj));
- blk->do_oop(ak->adr_component_mirror());
- blk->do_oop(ak->adr_lower_dimension());
- blk->do_oop(ak->adr_higher_dimension());
+ oop* addr;
+ addr = ak->adr_component_mirror();
+ if (mr.contains(addr)) { blk->do_oop(addr); }
+ addr = ak->adr_lower_dimension();
+ if (mr.contains(addr)) { blk->do_oop(addr); }
+ addr = ak->adr_higher_dimension();
+ if (mr.contains(addr)) { blk->do_oop(addr); }
ak->vtable()->oop_oop_iterate_m(blk, mr);
return klassKlass::oop_oop_iterate_m(obj, blk, mr);
}
#ifndef SERIALGC