214 bool MutableSpace::cas_deallocate(HeapWord *obj, size_t size) { |
214 bool MutableSpace::cas_deallocate(HeapWord *obj, size_t size) { |
215 HeapWord* expected_top = obj + size; |
215 HeapWord* expected_top = obj + size; |
216 return (HeapWord*)Atomic::cmpxchg_ptr(obj, top_addr(), expected_top) == expected_top; |
216 return (HeapWord*)Atomic::cmpxchg_ptr(obj, top_addr(), expected_top) == expected_top; |
217 } |
217 } |
218 |
218 |
219 void MutableSpace::oop_iterate(OopClosure* cl) { |
219 void MutableSpace::oop_iterate(ExtendedOopClosure* cl) { |
220 HeapWord* obj_addr = bottom(); |
220 HeapWord* obj_addr = bottom(); |
221 HeapWord* t = top(); |
221 HeapWord* t = top(); |
222 // Could call objects iterate, but this is easier. |
222 // Could call objects iterate, but this is easier. |
223 while (obj_addr < t) { |
223 while (obj_addr < t) { |
224 obj_addr += oop(obj_addr)->oop_iterate(cl); |
224 obj_addr += oop(obj_addr)->oop_iterate(cl); |
|
225 } |
|
226 } |
|
227 |
|
228 void MutableSpace::oop_iterate_no_header(OopClosure* cl) { |
|
229 HeapWord* obj_addr = bottom(); |
|
230 HeapWord* t = top(); |
|
231 // Could call objects iterate, but this is easier. |
|
232 while (obj_addr < t) { |
|
233 obj_addr += oop(obj_addr)->oop_iterate_no_header(cl); |
225 } |
234 } |
226 } |
235 } |
227 |
236 |
228 void MutableSpace::object_iterate(ObjectClosure* cl) { |
237 void MutableSpace::object_iterate(ObjectClosure* cl) { |
229 HeapWord* p = bottom(); |
238 HeapWord* p = bottom(); |