src/share/vm/gc_implementation/shared/mutableSpace.cpp

Print this page
rev 6796 : [mq]: templateOopIterate


 208       assert(is_object_aligned((intptr_t)obj) && is_object_aligned((intptr_t)new_top),
 209              "checking alignment");
 210       return obj;
 211     } else {
 212       return NULL;
 213     }
 214   } while (true);
 215 }
 216 
 217 // Try to deallocate previous allocation. Returns true upon success.
 218 bool MutableSpace::cas_deallocate(HeapWord *obj, size_t size) {
 219   HeapWord* expected_top = obj + size;
 220   return (HeapWord*)Atomic::cmpxchg_ptr(obj, top_addr(), expected_top) == expected_top;
 221 }
 222 
 223 void MutableSpace::oop_iterate(ExtendedOopClosure* cl) {
 224   HeapWord* obj_addr = bottom();
 225   HeapWord* t = top();
 226   // Could call objects iterate, but this is easier.
 227   while (obj_addr < t) {
 228     obj_addr += oop(obj_addr)->oop_iterate(cl);
 229   }
 230 }
 231 
 232 void MutableSpace::oop_iterate_no_header(OopClosure* cl) {
 233   HeapWord* obj_addr = bottom();
 234   HeapWord* t = top();
 235   // Could call objects iterate, but this is easier.
 236   while (obj_addr < t) {
 237     obj_addr += oop(obj_addr)->oop_iterate_no_header(cl);
 238   }
 239 }
 240 
 241 void MutableSpace::object_iterate(ObjectClosure* cl) {
 242   HeapWord* p = bottom();
 243   while (p < top()) {
 244     cl->do_object(oop(p));
 245     p += oop(p)->size();
 246   }
 247 }
 248 




 208       assert(is_object_aligned((intptr_t)obj) && is_object_aligned((intptr_t)new_top),
 209              "checking alignment");
 210       return obj;
 211     } else {
 212       return NULL;
 213     }
 214   } while (true);
 215 }
 216 
 217 // Try to deallocate previous allocation. Returns true upon success.
 218 bool MutableSpace::cas_deallocate(HeapWord *obj, size_t size) {
 219   HeapWord* expected_top = obj + size;
 220   return (HeapWord*)Atomic::cmpxchg_ptr(obj, top_addr(), expected_top) == expected_top;
 221 }
 222 
 223 void MutableSpace::oop_iterate(ExtendedOopClosure* cl) {
 224   HeapWord* obj_addr = bottom();
 225   HeapWord* t = top();
 226   // Could call objects iterate, but this is easier.
 227   while (obj_addr < t) {
 228     obj_addr += oop(obj_addr)->oop_iterate<false>(cl);
 229   }
 230 }
 231 
 232 void MutableSpace::oop_iterate_no_header(OopClosure* cl) {
 233   HeapWord* obj_addr = bottom();
 234   HeapWord* t = top();
 235   // Could call objects iterate, but this is easier.
 236   while (obj_addr < t) {
 237     obj_addr += oop(obj_addr)->oop_iterate_no_header(cl);
 238   }
 239 }
 240 
 241 void MutableSpace::object_iterate(ObjectClosure* cl) {
 242   HeapWord* p = bottom();
 243   while (p < top()) {
 244     cl->do_object(oop(p));
 245     p += oop(p)->size();
 246   }
 247 }
 248