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