< prev index next >

src/hotspot/share/gc/g1/g1OopClosures.inline.hpp

Print this page
rev 60061 : imported patch 8210462-kbarrett-review


 234     markWord m = obj->mark_raw();
 235     if (m.is_marked()) {
 236       forwardee = (oop) m.decode_pointer();
 237     } else {
 238       forwardee = _par_scan_state->copy_to_survivor_space(state, obj, m);
 239     }
 240     assert(forwardee != NULL, "forwardee should not be NULL");
 241     RawAccess<IS_NOT_NULL>::oop_store(p, forwardee);
 242 
 243     if (barrier == G1BarrierCLD) {
 244       do_cld_barrier(forwardee);
 245     }
 246   } else {
 247     if (state.is_humongous()) {
 248       _g1h->set_humongous_is_live(obj);
 249     } else if ((barrier != G1BarrierNoOptRoots) && state.is_optional()) {
 250       _par_scan_state->remember_root_into_optional_region(p);
 251     }
 252 
 253     // The object is not in collection set. If we're a root scanning
 254     // closure during a concurrent mark pause then attempt to mark the object.
 255     if (do_mark_object == G1MarkFromRoot) {
 256       mark_object(obj);
 257     }
 258   }
 259   trim_queue_partially();
 260 }
 261 
 262 template <class T> void G1RebuildRemSetClosure::do_oop_work(T* p) {
 263   oop const obj = RawAccess<MO_RELAXED>::oop_load(p);
 264   if (obj == NULL) {
 265     return;
 266   }
 267 
 268   if (HeapRegion::is_in_same_region(p, obj)) {
 269     return;
 270   }
 271 
 272   HeapRegion* to = _g1h->heap_region_containing(obj);
 273   HeapRegionRemSet* rem_set = to->rem_set();
 274   rem_set->add_reference(p, _worker_id);


 234     markWord m = obj->mark_raw();
 235     if (m.is_marked()) {
 236       forwardee = (oop) m.decode_pointer();
 237     } else {
 238       forwardee = _par_scan_state->copy_to_survivor_space(state, obj, m);
 239     }
 240     assert(forwardee != NULL, "forwardee should not be NULL");
 241     RawAccess<IS_NOT_NULL>::oop_store(p, forwardee);
 242 
 243     if (barrier == G1BarrierCLD) {
 244       do_cld_barrier(forwardee);
 245     }
 246   } else {
 247     if (state.is_humongous()) {
 248       _g1h->set_humongous_is_live(obj);
 249     } else if ((barrier != G1BarrierNoOptRoots) && state.is_optional()) {
 250       _par_scan_state->remember_root_into_optional_region(p);
 251     }
 252 
 253     // The object is not in collection set. If we're a root scanning
 254     // closure during a concurrent start pause then attempt to mark the object.
 255     if (do_mark_object == G1MarkFromRoot) {
 256       mark_object(obj);
 257     }
 258   }
 259   trim_queue_partially();
 260 }
 261 
 262 template <class T> void G1RebuildRemSetClosure::do_oop_work(T* p) {
 263   oop const obj = RawAccess<MO_RELAXED>::oop_load(p);
 264   if (obj == NULL) {
 265     return;
 266   }
 267 
 268   if (HeapRegion::is_in_same_region(p, obj)) {
 269     return;
 270   }
 271 
 272   HeapRegion* to = _g1h->heap_region_containing(obj);
 273   HeapRegionRemSet* rem_set = to->rem_set();
 274   rem_set->add_reference(p, _worker_id);
< prev index next >