comparison src/share/vm/gc_implementation/g1/g1ParScanThreadState.inline.hpp @ 20224:a2328cbebb23

8035401: Fix visibility of G1ParScanThreadState members Summary: After JDK-8035400 there were several opportunities to fix the visibility of several members of the G1ParScanThreadState class. Reviewed-by: brutisso, mgerdin
author tschatzl
date Mon, 21 Jul 2014 09:41:06 +0200
parents b0c374311c4e
children a3953c777565
comparison
equal deleted inserted replaced
20223:b0c374311c4e 20224:a2328cbebb23
39 if (G1DeferredRSUpdate) { 39 if (G1DeferredRSUpdate) {
40 deferred_rs_update(from, p, tid); 40 deferred_rs_update(from, p, tid);
41 } else { 41 } else {
42 immediate_rs_update(from, p, tid); 42 immediate_rs_update(from, p, tid);
43 } 43 }
44 }
45
46 template <class T> void G1ParScanThreadState::do_oop_evac(T* p, HeapRegion* from) {
47 assert(!oopDesc::is_null(oopDesc::load_decode_heap_oop(p)),
48 "Reference should not be NULL here as such are never pushed to the task queue.");
49 oop obj = oopDesc::load_decode_heap_oop_not_null(p);
50
51 // Although we never intentionally push references outside of the collection
52 // set, due to (benign) races in the claim mechanism during RSet scanning more
53 // than one thread might claim the same card. So the same card may be
54 // processed multiple times. So redo this check.
55 if (_g1h->in_cset_fast_test(obj)) {
56 oop forwardee;
57 if (obj->is_forwarded()) {
58 forwardee = obj->forwardee();
59 } else {
60 forwardee = copy_to_survivor_space(obj);
61 }
62 assert(forwardee != NULL, "forwardee should not be NULL");
63 oopDesc::encode_store_heap_oop(p, forwardee);
64 }
65
66 assert(obj != NULL, "Must be");
67 update_rs(from, p, queue_num());
44 } 68 }
45 69
46 inline void G1ParScanThreadState::do_oop_partial_array(oop* p) { 70 inline void G1ParScanThreadState::do_oop_partial_array(oop* p) {
47 assert(has_partial_array_mask(p), "invariant"); 71 assert(has_partial_array_mask(p), "invariant");
48 oop from_obj = clear_partial_array_mask(p); 72 oop from_obj = clear_partial_array_mask(p);
102 } else { 126 } else {
103 do_oop_partial_array((oop*)ref_to_scan); 127 do_oop_partial_array((oop*)ref_to_scan);
104 } 128 }
105 } 129 }
106 130
107 inline void G1ParScanThreadState::deal_with_reference(StarTask ref) { 131 inline void G1ParScanThreadState::dispatch_reference(StarTask ref) {
108 assert(verify_task(ref), "sanity"); 132 assert(verify_task(ref), "sanity");
109 if (ref.is_narrow()) { 133 if (ref.is_narrow()) {
110 deal_with_reference((narrowOop*)ref); 134 deal_with_reference((narrowOop*)ref);
111 } else { 135 } else {
112 deal_with_reference((oop*)ref); 136 deal_with_reference((oop*)ref);
113 } 137 }
114 } 138 }
115 139
140 void G1ParScanThreadState::steal_and_trim_queue(RefToScanQueueSet *task_queues) {
141 StarTask stolen_task;
142 while (task_queues->steal(queue_num(), hash_seed(), stolen_task)) {
143 assert(verify_task(stolen_task), "sanity");
144 dispatch_reference(stolen_task);
145
146 // We've just processed a reference and we might have made
147 // available new entries on the queues. So we have to make sure
148 // we drain the queues as necessary.
149 trim_queue();
150 }
151 }
152
116 #endif /* SHARE_VM_GC_IMPLEMENTATION_G1_G1PARSCANTHREADSTATE_INLINE_HPP */ 153 #endif /* SHARE_VM_GC_IMPLEMENTATION_G1_G1PARSCANTHREADSTATE_INLINE_HPP */
117 154