109 Klass* objK = obj->klass(); 110 markOop m = obj->mark(); 111 oop new_obj; 112 if (m->is_marked()) { // Contains forwarding pointer. 113 new_obj = ParNewGeneration::real_forwardee(obj); 114 oopDesc::encode_store_heap_oop_not_null(p, new_obj); 115 log_develop_trace(gc, scavenge)("{%s %s ( " PTR_FORMAT " ) " PTR_FORMAT " -> " PTR_FORMAT " (%d)}", 116 "forwarded ", 117 new_obj->klass()->internal_name(), p2i(p), p2i((void *)obj), p2i((void *)new_obj), new_obj->size()); 118 } else { 119 size_t obj_sz = obj->size_given_klass(objK); 120 new_obj = _g->copy_to_survivor_space(_par_scan_state, obj, obj_sz, m); 121 oopDesc::encode_store_heap_oop_not_null(p, new_obj); 122 if (root_scan) { 123 // This may have pushed an object. If we have a root 124 // category with a lot of roots, can't let the queue get too 125 // full: 126 (void)_par_scan_state->trim_queues(10 * ParallelGCThreads); 127 } 128 } 129 if (is_scanning_a_klass()) { 130 do_klass_barrier(); 131 } else if (gc_barrier) { 132 // Now call parent closure 133 par_do_barrier(p); 134 } 135 } 136 } 137 } 138 139 inline void ParScanWithBarrierClosure::do_oop_nv(oop* p) { ParScanClosure::do_oop_work(p, true, false); } 140 inline void ParScanWithBarrierClosure::do_oop_nv(narrowOop* p) { ParScanClosure::do_oop_work(p, true, false); } 141 142 inline void ParScanWithoutBarrierClosure::do_oop_nv(oop* p) { ParScanClosure::do_oop_work(p, false, false); } 143 inline void ParScanWithoutBarrierClosure::do_oop_nv(narrowOop* p) { ParScanClosure::do_oop_work(p, false, false); } 144 145 #endif // SHARE_VM_GC_CMS_PAROOPCLOSURES_INLINE_HPP | 109 Klass* objK = obj->klass(); 110 markOop m = obj->mark(); 111 oop new_obj; 112 if (m->is_marked()) { // Contains forwarding pointer. 113 new_obj = ParNewGeneration::real_forwardee(obj); 114 oopDesc::encode_store_heap_oop_not_null(p, new_obj); 115 log_develop_trace(gc, scavenge)("{%s %s ( " PTR_FORMAT " ) " PTR_FORMAT " -> " PTR_FORMAT " (%d)}", 116 "forwarded ", 117 new_obj->klass()->internal_name(), p2i(p), p2i((void *)obj), p2i((void *)new_obj), new_obj->size()); 118 } else { 119 size_t obj_sz = obj->size_given_klass(objK); 120 new_obj = _g->copy_to_survivor_space(_par_scan_state, obj, obj_sz, m); 121 oopDesc::encode_store_heap_oop_not_null(p, new_obj); 122 if (root_scan) { 123 // This may have pushed an object. If we have a root 124 // category with a lot of roots, can't let the queue get too 125 // full: 126 (void)_par_scan_state->trim_queues(10 * ParallelGCThreads); 127 } 128 } 129 if (is_scanning_a_cld()) { 130 do_cld_barrier(); 131 } else if (gc_barrier) { 132 // Now call parent closure 133 par_do_barrier(p); 134 } 135 } 136 } 137 } 138 139 inline void ParScanWithBarrierClosure::do_oop_nv(oop* p) { ParScanClosure::do_oop_work(p, true, false); } 140 inline void ParScanWithBarrierClosure::do_oop_nv(narrowOop* p) { ParScanClosure::do_oop_work(p, true, false); } 141 142 inline void ParScanWithoutBarrierClosure::do_oop_nv(oop* p) { ParScanClosure::do_oop_work(p, false, false); } 143 inline void ParScanWithoutBarrierClosure::do_oop_nv(narrowOop* p) { ParScanClosure::do_oop_work(p, false, false); } 144 145 #endif // SHARE_VM_GC_CMS_PAROOPCLOSURES_INLINE_HPP |