187 ShenandoahRootUpdater::ShenandoahRootUpdater(uint n_workers, ShenandoahPhaseTimings::Phase phase) : |
187 ShenandoahRootUpdater::ShenandoahRootUpdater(uint n_workers, ShenandoahPhaseTimings::Phase phase) : |
188 ShenandoahRootProcessor(phase), |
188 ShenandoahRootProcessor(phase), |
189 _thread_roots(n_workers > 1) { |
189 _thread_roots(n_workers > 1) { |
190 } |
190 } |
191 |
191 |
|
192 void ShenandoahRootUpdater::strong_roots_do(uint worker_id, OopClosure* oops_cl) { |
|
193 CodeBlobToOopClosure update_blobs(oops_cl, CodeBlobToOopClosure::FixRelocations); |
|
194 CLDToOopClosure clds(oops_cl, ClassLoaderData::_claim_strong); |
|
195 |
|
196 _serial_roots.oops_do(oops_cl, worker_id); |
|
197 _vm_roots.oops_do(oops_cl, worker_id); |
|
198 |
|
199 _thread_roots.oops_do(oops_cl, NULL, worker_id); |
|
200 _cld_roots.cld_do(&clds, worker_id); |
|
201 _code_roots.code_blobs_do(&update_blobs, worker_id); |
|
202 } |
|
203 |
192 ShenandoahRootAdjuster::ShenandoahRootAdjuster(uint n_workers, ShenandoahPhaseTimings::Phase phase) : |
204 ShenandoahRootAdjuster::ShenandoahRootAdjuster(uint n_workers, ShenandoahPhaseTimings::Phase phase) : |
193 ShenandoahRootProcessor(phase), |
205 ShenandoahRootProcessor(phase), |
194 _thread_roots(n_workers > 1) { |
206 _thread_roots(n_workers > 1) { |
195 assert(ShenandoahHeap::heap()->is_full_gc_in_progress(), "Full GC only"); |
207 assert(ShenandoahHeap::heap()->is_full_gc_in_progress(), "Full GC only"); |
196 } |
208 } |