equal
deleted
inserted
replaced
674 OopClosure* keep_alive, |
674 OopClosure* keep_alive, |
675 VoidClosure* complete_gc) { |
675 VoidClosure* complete_gc) { |
676 ResourceMark rm; |
676 ResourceMark rm; |
677 DiscoveredListIterator iter(refs_list, keep_alive, is_alive); |
677 DiscoveredListIterator iter(refs_list, keep_alive, is_alive); |
678 while (iter.has_next()) { |
678 while (iter.has_next()) { |
679 iter.update_discovered(); |
|
680 iter.load_ptrs(DEBUG_ONLY(false /* allow_null_referent */)); |
679 iter.load_ptrs(DEBUG_ONLY(false /* allow_null_referent */)); |
681 if (clear_referent) { |
680 if (clear_referent) { |
682 // NULL out referent pointer |
681 // NULL out referent pointer |
683 iter.clear_referent(); |
682 iter.clear_referent(); |
684 } else { |
683 } else { |
691 p2i(iter.obj()), iter.obj()->klass()->internal_name()); |
690 p2i(iter.obj()), iter.obj()->klass()->internal_name()); |
692 } |
691 } |
693 assert(iter.obj()->is_oop(UseConcMarkSweepGC), "Adding a bad reference"); |
692 assert(iter.obj()->is_oop(UseConcMarkSweepGC), "Adding a bad reference"); |
694 iter.next(); |
693 iter.next(); |
695 } |
694 } |
696 // Remember to update the next pointer of the last ref. |
|
697 iter.update_discovered(); |
|
698 // Close the reachable set |
695 // Close the reachable set |
699 complete_gc->do_void(); |
696 complete_gc->do_void(); |
700 } |
697 } |
701 |
698 |
702 void |
699 void |