hotspot/src/share/vm/gc/serial/markSweep.cpp
changeset 46810 7dad333205cd
parent 46415 7d5a286cdf89
equal deleted inserted replaced
46809:057f21a10f5f 46810:7dad333205cd
    85 template <class T> inline void MarkSweep::mark_and_push(T* p) {
    85 template <class T> inline void MarkSweep::mark_and_push(T* p) {
    86   T heap_oop = oopDesc::load_heap_oop(p);
    86   T heap_oop = oopDesc::load_heap_oop(p);
    87   if (!oopDesc::is_null(heap_oop)) {
    87   if (!oopDesc::is_null(heap_oop)) {
    88     oop obj = oopDesc::decode_heap_oop_not_null(heap_oop);
    88     oop obj = oopDesc::decode_heap_oop_not_null(heap_oop);
    89     if (!obj->mark()->is_marked() &&
    89     if (!obj->mark()->is_marked() &&
    90         !is_archive_object(obj)) {
    90         !is_closed_archive_object(obj)) {
    91       mark_object(obj);
    91       mark_object(obj);
    92       _marking_stack.push(obj);
    92       _marking_stack.push(obj);
    93     }
    93     }
    94   }
    94   }
    95 }
    95 }
   182          "roots shouldn't be things within the heap");
   182          "roots shouldn't be things within the heap");
   183   T heap_oop = oopDesc::load_heap_oop(p);
   183   T heap_oop = oopDesc::load_heap_oop(p);
   184   if (!oopDesc::is_null(heap_oop)) {
   184   if (!oopDesc::is_null(heap_oop)) {
   185     oop obj = oopDesc::decode_heap_oop_not_null(heap_oop);
   185     oop obj = oopDesc::decode_heap_oop_not_null(heap_oop);
   186     if (!obj->mark()->is_marked() &&
   186     if (!obj->mark()->is_marked() &&
   187         !is_archive_object(obj)) {
   187         !is_closed_archive_object(obj)) {
   188       mark_object(obj);
   188       mark_object(obj);
   189       follow_object(obj);
   189       follow_object(obj);
   190     }
   190     }
   191   }
   191   }
   192   follow_stack();
   192   follow_stack();
   266   }
   266   }
   267 }
   267 }
   268 
   268 
   269 MarkSweep::IsAliveClosure   MarkSweep::is_alive;
   269 MarkSweep::IsAliveClosure   MarkSweep::is_alive;
   270 
   270 
   271 bool MarkSweep::IsAliveClosure::do_object_b(oop p) { return p->is_gc_marked() || is_archive_object(p); }
   271 bool MarkSweep::IsAliveClosure::do_object_b(oop p) { return p->is_gc_marked() || is_closed_archive_object(p); }
   272 
   272 
   273 MarkSweep::KeepAliveClosure MarkSweep::keep_alive;
   273 MarkSweep::KeepAliveClosure MarkSweep::keep_alive;
   274 
   274 
   275 void MarkSweep::KeepAliveClosure::do_oop(oop* p)       { MarkSweep::KeepAliveClosure::do_oop_work(p); }
   275 void MarkSweep::KeepAliveClosure::do_oop(oop* p)       { MarkSweep::KeepAliveClosure::do_oop_work(p); }
   276 void MarkSweep::KeepAliveClosure::do_oop(narrowOop* p) { MarkSweep::KeepAliveClosure::do_oop_work(p); }
   276 void MarkSweep::KeepAliveClosure::do_oop(narrowOop* p) { MarkSweep::KeepAliveClosure::do_oop_work(p); }