src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp

Print this page

        

*** 4787,4801 **** } template <G1Barrier barrier, bool do_mark_object> template <class T> void G1ParCopyClosure<barrier, do_mark_object>::do_oop_work(T* p) { ! oop obj = oopDesc::load_decode_heap_oop(p); assert(_worker_id == _par_scan_state->queue_num(), "sanity"); - // here the null check is implicit in the cset_fast_test() test if (_g1->in_cset_fast_test(obj)) { oop forwardee; if (obj->is_forwarded()) { forwardee = obj->forwardee(); } else { --- 4787,4806 ---- } template <G1Barrier barrier, bool do_mark_object> template <class T> void G1ParCopyClosure<barrier, do_mark_object>::do_oop_work(T* p) { ! T heap_oop = oopDesc::load_heap_oop(p); ! ! if (oopDesc::is_null(heap_oop)) { ! return; ! } ! ! oop obj = oopDesc::decode_heap_oop_not_null(heap_oop); assert(_worker_id == _par_scan_state->queue_num(), "sanity"); if (_g1->in_cset_fast_test(obj)) { oop forwardee; if (obj->is_forwarded()) { forwardee = obj->forwardee(); } else {
*** 4814,4829 **** } } else { // The object is not in collection set. If we're a root scanning // closure during an initial mark pause (i.e. do_mark_object will // be true) then attempt to mark the object. ! if (do_mark_object && _g1->is_in_g1_reserved(obj)) { mark_object(obj); } } ! if (barrier == G1BarrierEvac && obj != NULL) { _par_scan_state->update_rs(_from, p, _worker_id); } } template void G1ParCopyClosure<G1BarrierEvac, false>::do_oop_work(oop* p); --- 4819,4834 ---- } } else { // The object is not in collection set. If we're a root scanning // closure during an initial mark pause (i.e. do_mark_object will // be true) then attempt to mark the object. ! if (do_mark_object) { mark_object(obj); } } ! if (barrier == G1BarrierEvac) { _par_scan_state->update_rs(_from, p, _worker_id); } } template void G1ParCopyClosure<G1BarrierEvac, false>::do_oop_work(oop* p);