< prev index next >

src/share/vm/gc/serial/markSweep.cpp

Print this page
rev 12854 : [mq]: gcinterface.patch


 161 void MarkSweep::follow_stack() {
 162   do {
 163     while (!_marking_stack.is_empty()) {
 164       oop obj = _marking_stack.pop();
 165       assert (obj->is_gc_marked(), "p must be marked");
 166       follow_object(obj);
 167     }
 168     // Process ObjArrays one at a time to avoid marking stack bloat.
 169     if (!_objarray_stack.is_empty()) {
 170       ObjArrayTask task = _objarray_stack.pop();
 171       follow_array_chunk(objArrayOop(task.obj()), task.index());
 172     }
 173   } while (!_marking_stack.is_empty() || !_objarray_stack.is_empty());
 174 }
 175 
 176 MarkSweep::FollowStackClosure MarkSweep::follow_stack_closure;
 177 
 178 void MarkSweep::FollowStackClosure::do_void() { follow_stack(); }
 179 
 180 template <class T> inline void MarkSweep::follow_root(T* p) {
 181   assert(!Universe::heap()->is_in_reserved(p),
 182          "roots shouldn't be things within the heap");
 183   T heap_oop = oopDesc::load_heap_oop(p);
 184   if (!oopDesc::is_null(heap_oop)) {
 185     oop obj = oopDesc::decode_heap_oop_not_null(heap_oop);
 186     if (!obj->mark()->is_marked() &&
 187         !is_archive_object(obj)) {
 188       mark_object(obj);
 189       follow_object(obj);
 190     }
 191   }
 192   follow_stack();
 193 }
 194 
 195 void MarkSweep::FollowRootClosure::do_oop(oop* p)       { follow_root(p); }
 196 void MarkSweep::FollowRootClosure::do_oop(narrowOop* p) { follow_root(p); }
 197 
 198 void PreservedMark::adjust_pointer() {
 199   MarkSweep::adjust_pointer(&_obj);
 200 }
 201 




 161 void MarkSweep::follow_stack() {
 162   do {
 163     while (!_marking_stack.is_empty()) {
 164       oop obj = _marking_stack.pop();
 165       assert (obj->is_gc_marked(), "p must be marked");
 166       follow_object(obj);
 167     }
 168     // Process ObjArrays one at a time to avoid marking stack bloat.
 169     if (!_objarray_stack.is_empty()) {
 170       ObjArrayTask task = _objarray_stack.pop();
 171       follow_array_chunk(objArrayOop(task.obj()), task.index());
 172     }
 173   } while (!_marking_stack.is_empty() || !_objarray_stack.is_empty());
 174 }
 175 
 176 MarkSweep::FollowStackClosure MarkSweep::follow_stack_closure;
 177 
 178 void MarkSweep::FollowStackClosure::do_void() { follow_stack(); }
 179 
 180 template <class T> inline void MarkSweep::follow_root(T* p) {
 181   assert(!GC::gc()->heap()->is_in_reserved(p),
 182          "roots shouldn't be things within the heap");
 183   T heap_oop = oopDesc::load_heap_oop(p);
 184   if (!oopDesc::is_null(heap_oop)) {
 185     oop obj = oopDesc::decode_heap_oop_not_null(heap_oop);
 186     if (!obj->mark()->is_marked() &&
 187         !is_archive_object(obj)) {
 188       mark_object(obj);
 189       follow_object(obj);
 190     }
 191   }
 192   follow_stack();
 193 }
 194 
 195 void MarkSweep::FollowRootClosure::do_oop(oop* p)       { follow_root(p); }
 196 void MarkSweep::FollowRootClosure::do_oop(narrowOop* p) { follow_root(p); }
 197 
 198 void PreservedMark::adjust_pointer() {
 199   MarkSweep::adjust_pointer(&_obj);
 200 }
 201 


< prev index next >