Mercurial > hg > graal-jvmci-8
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 |