167
168 void ShenandoahRootEvacuator::roots_do(uint worker_id, OopClosure* oops) {
169 MarkingCodeBlobClosure blobsCl(oops, CodeBlobToOopClosure::FixRelocations);
170 AlwaysTrueClosure always_true;
171
172 _serial_roots.oops_do(oops, worker_id);
173 _serial_weak_roots.weak_oops_do(oops, worker_id);
174 if (_include_concurrent_roots) {
175 CLDToOopClosure clds(oops, ClassLoaderData::_claim_strong);
176 _vm_roots.oops_do<OopClosure>(oops, worker_id);
177 _cld_roots.cld_do(&clds, worker_id);
178 _weak_roots.oops_do<OopClosure>(oops, worker_id);
179 }
180
181 _thread_roots.oops_do(oops, NULL, worker_id);
182 _code_roots.code_blobs_do(&blobsCl, worker_id);
183
184 _dedup_roots.oops_do(&always_true, oops, worker_id);
185 }
186
187 ShenandoahRootUpdater::ShenandoahRootUpdater(uint n_workers, ShenandoahPhaseTimings::Phase phase, bool update_code_cache) :
188 ShenandoahRootProcessor(phase),
189 _thread_roots(n_workers > 1),
190 _update_code_cache(update_code_cache) {
191 }
192
193 ShenandoahRootAdjuster::ShenandoahRootAdjuster(uint n_workers, ShenandoahPhaseTimings::Phase phase) :
194 ShenandoahRootProcessor(phase),
195 _thread_roots(n_workers > 1) {
196 assert(ShenandoahHeap::heap()->is_full_gc_in_progress(), "Full GC only");
197 }
198
199 void ShenandoahRootAdjuster::roots_do(uint worker_id, OopClosure* oops) {
200 CodeBlobToOopClosure adjust_code_closure(oops, CodeBlobToOopClosure::FixRelocations);
201 CLDToOopClosure adjust_cld_closure(oops, ClassLoaderData::_claim_strong);
202 AlwaysTrueClosure always_true;
203
204 _serial_roots.oops_do(oops, worker_id);
205 _vm_roots.oops_do(oops, worker_id);
206
207 _thread_roots.oops_do(oops, NULL, worker_id);
208 _cld_roots.cld_do(&adjust_cld_closure, worker_id);
209 _code_roots.code_blobs_do(&adjust_code_closure, worker_id);
210
|
167
168 void ShenandoahRootEvacuator::roots_do(uint worker_id, OopClosure* oops) {
169 MarkingCodeBlobClosure blobsCl(oops, CodeBlobToOopClosure::FixRelocations);
170 AlwaysTrueClosure always_true;
171
172 _serial_roots.oops_do(oops, worker_id);
173 _serial_weak_roots.weak_oops_do(oops, worker_id);
174 if (_include_concurrent_roots) {
175 CLDToOopClosure clds(oops, ClassLoaderData::_claim_strong);
176 _vm_roots.oops_do<OopClosure>(oops, worker_id);
177 _cld_roots.cld_do(&clds, worker_id);
178 _weak_roots.oops_do<OopClosure>(oops, worker_id);
179 }
180
181 _thread_roots.oops_do(oops, NULL, worker_id);
182 _code_roots.code_blobs_do(&blobsCl, worker_id);
183
184 _dedup_roots.oops_do(&always_true, oops, worker_id);
185 }
186
187 ShenandoahRootUpdater::ShenandoahRootUpdater(uint n_workers, ShenandoahPhaseTimings::Phase phase) :
188 ShenandoahRootProcessor(phase),
189 _thread_roots(n_workers > 1) {
190 }
191
192 ShenandoahRootAdjuster::ShenandoahRootAdjuster(uint n_workers, ShenandoahPhaseTimings::Phase phase) :
193 ShenandoahRootProcessor(phase),
194 _thread_roots(n_workers > 1) {
195 assert(ShenandoahHeap::heap()->is_full_gc_in_progress(), "Full GC only");
196 }
197
198 void ShenandoahRootAdjuster::roots_do(uint worker_id, OopClosure* oops) {
199 CodeBlobToOopClosure adjust_code_closure(oops, CodeBlobToOopClosure::FixRelocations);
200 CLDToOopClosure adjust_cld_closure(oops, ClassLoaderData::_claim_strong);
201 AlwaysTrueClosure always_true;
202
203 _serial_roots.oops_do(oops, worker_id);
204 _vm_roots.oops_do(oops, worker_id);
205
206 _thread_roots.oops_do(oops, NULL, worker_id);
207 _cld_roots.cld_do(&adjust_cld_closure, worker_id);
208 _code_roots.code_blobs_do(&adjust_code_closure, worker_id);
209
|