--- old/src/share/vm/oops/arrayKlassKlass.cpp Thu Mar 24 01:20:07 2011 +++ new/src/share/vm/oops/arrayKlassKlass.cpp Thu Mar 24 01:20:07 2011 @@ -104,9 +104,13 @@ 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); }