Mercurial > hg > truffle
comparison src/share/vm/gc_implementation/g1/g1EvacFailure.hpp @ 4836:d30fa85f9994
6484965: G1: piggy-back liveness accounting phase on marking
Summary: Remove the separate counting phase of concurrent marking by tracking the amount of marked bytes and the cards spanned by marked objects in marking task/worker thread local data structures, which are updated as individual objects are marked.
Reviewed-by: brutisso, tonyp
author | johnc |
---|---|
date | Thu, 12 Jan 2012 00:06:47 -0800 |
parents | 2ace1c4ee8da |
children | eff609af17d7 |
comparison
equal
deleted
inserted
replaced
4835:877914d90c57 | 4836:d30fa85f9994 |
---|---|
68 HeapRegion* _hr; | 68 HeapRegion* _hr; |
69 size_t _marked_bytes; | 69 size_t _marked_bytes; |
70 OopsInHeapRegionClosure *_update_rset_cl; | 70 OopsInHeapRegionClosure *_update_rset_cl; |
71 bool _during_initial_mark; | 71 bool _during_initial_mark; |
72 bool _during_conc_mark; | 72 bool _during_conc_mark; |
73 uint _worker_id; | |
74 | |
73 public: | 75 public: |
74 RemoveSelfForwardPtrObjClosure(G1CollectedHeap* g1, ConcurrentMark* cm, | 76 RemoveSelfForwardPtrObjClosure(G1CollectedHeap* g1, ConcurrentMark* cm, |
75 HeapRegion* hr, | 77 HeapRegion* hr, |
76 OopsInHeapRegionClosure* update_rset_cl, | 78 OopsInHeapRegionClosure* update_rset_cl, |
77 bool during_initial_mark, | 79 bool during_initial_mark, |
78 bool during_conc_mark) : | 80 bool during_conc_mark, |
81 uint worker_id) : | |
79 _g1(g1), _cm(cm), _hr(hr), _marked_bytes(0), | 82 _g1(g1), _cm(cm), _hr(hr), _marked_bytes(0), |
80 _update_rset_cl(update_rset_cl), | 83 _update_rset_cl(update_rset_cl), |
81 _during_initial_mark(during_initial_mark), | 84 _during_initial_mark(during_initial_mark), |
82 _during_conc_mark(during_conc_mark) { } | 85 _during_conc_mark(during_conc_mark), |
86 _worker_id(worker_id) { } | |
83 | 87 |
84 size_t marked_bytes() { return _marked_bytes; } | 88 size_t marked_bytes() { return _marked_bytes; } |
85 | 89 |
86 // <original comment> | 90 // <original comment> |
87 // The original idea here was to coalesce evacuated and dead objects. | 91 // The original idea here was to coalesce evacuated and dead objects. |
121 // still pointed to be roots. During concurrent marking, and | 125 // still pointed to be roots. During concurrent marking, and |
122 // after initial-mark, we don't need to mark any objects | 126 // after initial-mark, we don't need to mark any objects |
123 // explicitly and all objects in the CSet are considered | 127 // explicitly and all objects in the CSet are considered |
124 // (implicitly) live. So, we won't mark them explicitly and | 128 // (implicitly) live. So, we won't mark them explicitly and |
125 // we'll leave them over NTAMS. | 129 // we'll leave them over NTAMS. |
126 _cm->markNext(obj); | 130 _cm->grayRoot(obj, obj_size, _worker_id); |
127 } | 131 } |
128 _marked_bytes += (obj_size * HeapWordSize); | 132 _marked_bytes += (obj_size * HeapWordSize); |
129 obj->set_mark(markOopDesc::prototype()); | 133 obj->set_mark(markOopDesc::prototype()); |
130 | 134 |
131 // While we were processing RSet buffers during the collection, | 135 // While we were processing RSet buffers during the collection, |
153 | 157 |
154 class RemoveSelfForwardPtrHRClosure: public HeapRegionClosure { | 158 class RemoveSelfForwardPtrHRClosure: public HeapRegionClosure { |
155 G1CollectedHeap* _g1h; | 159 G1CollectedHeap* _g1h; |
156 ConcurrentMark* _cm; | 160 ConcurrentMark* _cm; |
157 OopsInHeapRegionClosure *_update_rset_cl; | 161 OopsInHeapRegionClosure *_update_rset_cl; |
162 uint _worker_id; | |
158 | 163 |
159 public: | 164 public: |
160 RemoveSelfForwardPtrHRClosure(G1CollectedHeap* g1h, | 165 RemoveSelfForwardPtrHRClosure(G1CollectedHeap* g1h, |
161 OopsInHeapRegionClosure* update_rset_cl) : | 166 OopsInHeapRegionClosure* update_rset_cl, |
167 uint worker_id) : | |
162 _g1h(g1h), _update_rset_cl(update_rset_cl), | 168 _g1h(g1h), _update_rset_cl(update_rset_cl), |
163 _cm(_g1h->concurrent_mark()) { } | 169 _worker_id(worker_id), _cm(_g1h->concurrent_mark()) { } |
164 | 170 |
165 bool doHeapRegion(HeapRegion *hr) { | 171 bool doHeapRegion(HeapRegion *hr) { |
166 bool during_initial_mark = _g1h->g1_policy()->during_initial_mark_pause(); | 172 bool during_initial_mark = _g1h->g1_policy()->during_initial_mark_pause(); |
167 bool during_conc_mark = _g1h->mark_in_progress(); | 173 bool during_conc_mark = _g1h->mark_in_progress(); |
168 | 174 |
171 | 177 |
172 if (hr->claimHeapRegion(HeapRegion::ParEvacFailureClaimValue)) { | 178 if (hr->claimHeapRegion(HeapRegion::ParEvacFailureClaimValue)) { |
173 if (hr->evacuation_failed()) { | 179 if (hr->evacuation_failed()) { |
174 RemoveSelfForwardPtrObjClosure rspc(_g1h, _cm, hr, _update_rset_cl, | 180 RemoveSelfForwardPtrObjClosure rspc(_g1h, _cm, hr, _update_rset_cl, |
175 during_initial_mark, | 181 during_initial_mark, |
176 during_conc_mark); | 182 during_conc_mark, |
183 _worker_id); | |
177 | 184 |
178 MemRegion mr(hr->bottom(), hr->end()); | 185 MemRegion mr(hr->bottom(), hr->end()); |
179 // We'll recreate the prev marking info so we'll first clear | 186 // We'll recreate the prev marking info so we'll first clear |
180 // the prev bitmap range for this region. We never mark any | 187 // the prev bitmap range for this region. We never mark any |
181 // CSet objects explicitly so the next bitmap range should be | 188 // CSet objects explicitly so the next bitmap range should be |
224 OopsInHeapRegionClosure *update_rset_cl = &deferred_update; | 231 OopsInHeapRegionClosure *update_rset_cl = &deferred_update; |
225 if (!G1DeferredRSUpdate) { | 232 if (!G1DeferredRSUpdate) { |
226 update_rset_cl = &immediate_update; | 233 update_rset_cl = &immediate_update; |
227 } | 234 } |
228 | 235 |
229 RemoveSelfForwardPtrHRClosure rsfp_cl(_g1h, update_rset_cl); | 236 RemoveSelfForwardPtrHRClosure rsfp_cl(_g1h, update_rset_cl, worker_id); |
230 | 237 |
231 HeapRegion* hr = _g1h->start_cset_region_for_worker(worker_id); | 238 HeapRegion* hr = _g1h->start_cset_region_for_worker(worker_id); |
232 _g1h->collection_set_iterate_from(hr, &rsfp_cl); | 239 _g1h->collection_set_iterate_from(hr, &rsfp_cl); |
233 } | 240 } |
234 }; | 241 }; |