255 assert(ShenandoahHeap::heap()->unload_classes(), "Should be used during class unloading");
256 ShenandoahParallelOopsDoThreadClosure tc_cl(oops, code, tc);
257 ResourceMark rm;
258
259 _serial_roots.oops_do(oops, worker_id);
260 _vm_roots.oops_do(oops, worker_id);
261 _cld_roots.always_strong_cld_do(clds, worker_id);
262 _thread_roots.threads_do(&tc_cl, worker_id);
263 }
264
265 template <typename IsAlive, typename KeepAlive>
266 void ShenandoahRootUpdater::roots_do(uint worker_id, IsAlive* is_alive, KeepAlive* keep_alive) {
267 CodeBlobToOopClosure update_blobs(keep_alive, CodeBlobToOopClosure::FixRelocations);
268 CLDToOopClosure clds(keep_alive, ClassLoaderData::_claim_strong);
269
270 _serial_roots.oops_do(keep_alive, worker_id);
271 _vm_roots.oops_do(keep_alive, worker_id);
272
273 _thread_roots.oops_do(keep_alive, NULL, worker_id);
274 _cld_roots.cld_do(&clds, worker_id);
275
276 if(_update_code_cache) {
277 _code_roots.code_blobs_do(&update_blobs, worker_id);
278 }
279
280 _serial_weak_roots.weak_oops_do(is_alive, keep_alive, worker_id);
281 _weak_roots.weak_oops_do(is_alive, keep_alive, worker_id);
282 _dedup_roots.oops_do(is_alive, keep_alive, worker_id);
283 }
284
285 #endif // SHARE_GC_SHENANDOAH_SHENANDOAHROOTPROCESSOR_INLINE_HPP
|
255 assert(ShenandoahHeap::heap()->unload_classes(), "Should be used during class unloading");
256 ShenandoahParallelOopsDoThreadClosure tc_cl(oops, code, tc);
257 ResourceMark rm;
258
259 _serial_roots.oops_do(oops, worker_id);
260 _vm_roots.oops_do(oops, worker_id);
261 _cld_roots.always_strong_cld_do(clds, worker_id);
262 _thread_roots.threads_do(&tc_cl, worker_id);
263 }
264
265 template <typename IsAlive, typename KeepAlive>
266 void ShenandoahRootUpdater::roots_do(uint worker_id, IsAlive* is_alive, KeepAlive* keep_alive) {
267 CodeBlobToOopClosure update_blobs(keep_alive, CodeBlobToOopClosure::FixRelocations);
268 CLDToOopClosure clds(keep_alive, ClassLoaderData::_claim_strong);
269
270 _serial_roots.oops_do(keep_alive, worker_id);
271 _vm_roots.oops_do(keep_alive, worker_id);
272
273 _thread_roots.oops_do(keep_alive, NULL, worker_id);
274 _cld_roots.cld_do(&clds, worker_id);
275 _code_roots.code_blobs_do(&update_blobs, worker_id);
276
277 _serial_weak_roots.weak_oops_do(is_alive, keep_alive, worker_id);
278 _weak_roots.weak_oops_do(is_alive, keep_alive, worker_id);
279 _dedup_roots.oops_do(is_alive, keep_alive, worker_id);
280 }
281
282 #endif // SHARE_GC_SHENANDOAH_SHENANDOAHROOTPROCESSOR_INLINE_HPP
|