< prev index next >

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

Print this page
rev 49469 : [mq]: 8197850-calculate-liveness-in-regions-during-marking
rev 49473 : [mq]: 8180415-rebuild-remembered-set
rev 49477 : imported patch 8180415-sangheon-review
rev 49493 : [mq]: nanoopts


 230   T heap_oop = RawAccess<>::oop_load(p);
 231 
 232   if (CompressedOops::is_null(heap_oop)) {
 233     return;
 234   }
 235 
 236   oop obj = CompressedOops::decode_not_null(heap_oop);
 237 
 238   assert(_worker_id == _par_scan_state->worker_id(), "sanity");
 239 
 240   const InCSetState state = _g1->in_cset_state(obj);
 241   if (state.is_in_cset()) {
 242     oop forwardee;
 243     markOop m = obj->mark();
 244     if (m->is_marked()) {
 245       forwardee = (oop) m->decode_pointer();
 246     } else {
 247       forwardee = _par_scan_state->copy_to_survivor_space(state, obj, m);
 248     }
 249     assert(forwardee != NULL, "forwardee should not be NULL");
 250     RawAccess<>::oop_store(p, forwardee);
 251     if (do_mark_object != G1MarkNone && forwardee != obj) {
 252       // If the object is self-forwarded we don't need to explicitly
 253       // mark it, the evacuation failure protocol will do so.
 254       mark_forwarded_object(obj, forwardee);
 255     }
 256 
 257     if (barrier == G1BarrierCLD) {
 258       do_cld_barrier(forwardee);
 259     }
 260   } else {
 261     if (state.is_humongous()) {
 262       _g1->set_humongous_is_live(obj);
 263     }
 264 
 265     // The object is not in collection set. If we're a root scanning
 266     // closure during an initial mark pause then attempt to mark the object.
 267     if (do_mark_object == G1MarkFromRoot) {
 268       mark_object(obj);
 269     }
 270   }


 230   T heap_oop = RawAccess<>::oop_load(p);
 231 
 232   if (CompressedOops::is_null(heap_oop)) {
 233     return;
 234   }
 235 
 236   oop obj = CompressedOops::decode_not_null(heap_oop);
 237 
 238   assert(_worker_id == _par_scan_state->worker_id(), "sanity");
 239 
 240   const InCSetState state = _g1->in_cset_state(obj);
 241   if (state.is_in_cset()) {
 242     oop forwardee;
 243     markOop m = obj->mark();
 244     if (m->is_marked()) {
 245       forwardee = (oop) m->decode_pointer();
 246     } else {
 247       forwardee = _par_scan_state->copy_to_survivor_space(state, obj, m);
 248     }
 249     assert(forwardee != NULL, "forwardee should not be NULL");
 250     RawAccess<OOP_NOT_NULL>::oop_store(p, forwardee);
 251     if (do_mark_object != G1MarkNone && forwardee != obj) {
 252       // If the object is self-forwarded we don't need to explicitly
 253       // mark it, the evacuation failure protocol will do so.
 254       mark_forwarded_object(obj, forwardee);
 255     }
 256 
 257     if (barrier == G1BarrierCLD) {
 258       do_cld_barrier(forwardee);
 259     }
 260   } else {
 261     if (state.is_humongous()) {
 262       _g1->set_humongous_is_live(obj);
 263     }
 264 
 265     // The object is not in collection set. If we're a root scanning
 266     // closure during an initial mark pause then attempt to mark the object.
 267     if (do_mark_object == G1MarkFromRoot) {
 268       mark_object(obj);
 269     }
 270   }
< prev index next >