Mercurial > hg > truffle
comparison src/share/vm/gc_implementation/g1/concurrentMark.inline.hpp @ 20380:9337d0e7ea4f
8055919: Remove dead code in G1 concurrent marking code
Reviewed-by: jmasa, jwilhelm
author | tschatzl |
---|---|
date | Tue, 02 Sep 2014 15:04:00 +0200 |
parents | a8ea2f110d87 |
children | 7848fc12602b |
comparison
equal
deleted
inserted
replaced
20379:3372cbab6583 | 20380:9337d0e7ea4f |
---|---|
123 size_t* marked_bytes_array = count_marked_bytes_array_for(worker_id); | 123 size_t* marked_bytes_array = count_marked_bytes_array_for(worker_id); |
124 BitMap* task_card_bm = count_card_bitmap_for(worker_id); | 124 BitMap* task_card_bm = count_card_bitmap_for(worker_id); |
125 count_region(mr, hr, marked_bytes_array, task_card_bm); | 125 count_region(mr, hr, marked_bytes_array, task_card_bm); |
126 } | 126 } |
127 | 127 |
128 // Counts the given memory region, which may be a single object, in the | |
129 // task/worker counting data structures for the given worker id. | |
130 inline void ConcurrentMark::count_region(MemRegion mr, uint worker_id) { | |
131 HeapWord* addr = mr.start(); | |
132 HeapRegion* hr = _g1h->heap_region_containing_raw(addr); | |
133 count_region(mr, hr, worker_id); | |
134 } | |
135 | |
136 // Counts the given object in the given task/worker counting data structures. | 128 // Counts the given object in the given task/worker counting data structures. |
137 inline void ConcurrentMark::count_object(oop obj, | 129 inline void ConcurrentMark::count_object(oop obj, |
138 HeapRegion* hr, | 130 HeapRegion* hr, |
139 size_t* marked_bytes_array, | 131 size_t* marked_bytes_array, |
140 BitMap* task_card_bm) { | 132 BitMap* task_card_bm) { |
141 MemRegion mr((HeapWord*)obj, obj->size()); | 133 MemRegion mr((HeapWord*)obj, obj->size()); |
142 count_region(mr, hr, marked_bytes_array, task_card_bm); | 134 count_region(mr, hr, marked_bytes_array, task_card_bm); |
143 } | |
144 | |
145 // Counts the given object in the task/worker counting data | |
146 // structures for the given worker id. | |
147 inline void ConcurrentMark::count_object(oop obj, | |
148 HeapRegion* hr, | |
149 uint worker_id) { | |
150 size_t* marked_bytes_array = count_marked_bytes_array_for(worker_id); | |
151 BitMap* task_card_bm = count_card_bitmap_for(worker_id); | |
152 HeapWord* addr = (HeapWord*) obj; | |
153 count_object(obj, hr, marked_bytes_array, task_card_bm); | |
154 } | 135 } |
155 | 136 |
156 // Attempts to mark the given object and, if successful, counts | 137 // Attempts to mark the given object and, if successful, counts |
157 // the object in the given task/worker counting structures. | 138 // the object in the given task/worker counting structures. |
158 inline bool ConcurrentMark::par_mark_and_count(oop obj, | 139 inline bool ConcurrentMark::par_mark_and_count(oop obj, |
180 MemRegion mr(addr, word_size); | 161 MemRegion mr(addr, word_size); |
181 count_region(mr, hr, worker_id); | 162 count_region(mr, hr, worker_id); |
182 return true; | 163 return true; |
183 } | 164 } |
184 return false; | 165 return false; |
185 } | |
186 | |
187 // Attempts to mark the given object and, if successful, counts | |
188 // the object in the task/worker counting structures for the | |
189 // given worker id. | |
190 inline bool ConcurrentMark::par_mark_and_count(oop obj, | |
191 HeapRegion* hr, | |
192 uint worker_id) { | |
193 HeapWord* addr = (HeapWord*)obj; | |
194 if (_nextMarkBitMap->parMark(addr)) { | |
195 // Update the task specific count data for the object. | |
196 count_object(obj, hr, worker_id); | |
197 return true; | |
198 } | |
199 return false; | |
200 } | |
201 | |
202 // As above - but we don't know the heap region containing the | |
203 // object and so have to supply it. | |
204 inline bool ConcurrentMark::par_mark_and_count(oop obj, uint worker_id) { | |
205 HeapWord* addr = (HeapWord*)obj; | |
206 HeapRegion* hr = _g1h->heap_region_containing_raw(addr); | |
207 return par_mark_and_count(obj, hr, worker_id); | |
208 } | |
209 | |
210 // Similar to the above routine but we already know the size, in words, of | |
211 // the object that we wish to mark/count | |
212 inline bool ConcurrentMark::par_mark_and_count(oop obj, | |
213 size_t word_size, | |
214 uint worker_id) { | |
215 HeapWord* addr = (HeapWord*)obj; | |
216 if (_nextMarkBitMap->parMark(addr)) { | |
217 // Update the task specific count data for the object. | |
218 MemRegion mr(addr, word_size); | |
219 count_region(mr, worker_id); | |
220 return true; | |
221 } | |
222 return false; | |
223 } | |
224 | |
225 // Unconditionally mark the given object, and unconditinally count | |
226 // the object in the counting structures for worker id 0. | |
227 // Should *not* be called from parallel code. | |
228 inline bool ConcurrentMark::mark_and_count(oop obj, HeapRegion* hr) { | |
229 HeapWord* addr = (HeapWord*)obj; | |
230 _nextMarkBitMap->mark(addr); | |
231 // Update the task specific count data for the object. | |
232 count_object(obj, hr, 0 /* worker_id */); | |
233 return true; | |
234 } | |
235 | |
236 // As above - but we don't have the heap region containing the | |
237 // object, so we have to supply it. | |
238 inline bool ConcurrentMark::mark_and_count(oop obj) { | |
239 HeapWord* addr = (HeapWord*)obj; | |
240 HeapRegion* hr = _g1h->heap_region_containing_raw(addr); | |
241 return mark_and_count(obj, hr); | |
242 } | 166 } |
243 | 167 |
244 inline bool CMBitMapRO::iterate(BitMapClosure* cl, MemRegion mr) { | 168 inline bool CMBitMapRO::iterate(BitMapClosure* cl, MemRegion mr) { |
245 HeapWord* start_addr = MAX2(startWord(), mr.start()); | 169 HeapWord* start_addr = MAX2(startWord(), mr.start()); |
246 HeapWord* end_addr = MIN2(endWord(), mr.end()); | 170 HeapWord* end_addr = MIN2(endWord(), mr.end()); |