249
250 void ShenandoahHeapIterationRootScanner::roots_do(OopClosure* oops) {
251 assert(Thread::current()->is_VM_thread(), "Only by VM thread");
252 // Must use _claim_none to avoid interfering with concurrent CLDG iteration
253 CLDToOopClosure clds(oops, ClassLoaderData::_claim_none);
254 MarkingCodeBlobClosure code(oops, !CodeBlobToOopClosure::FixRelocations);
255 ShenandoahParallelOopsDoThreadClosure tc_cl(oops, &code, NULL);
256 AlwaysTrueClosure always_true;
257 ResourceMark rm;
258
259 _serial_roots.oops_do(oops, 0);
260 _vm_roots.oops_do(oops, 0);
261 _cld_roots.cld_do(&clds, 0);
262 _thread_roots.threads_do(&tc_cl, 0);
263 _code_roots.code_blobs_do(&code, 0);
264
265 _serial_weak_roots.weak_oops_do(oops, 0);
266 _weak_roots.oops_do<OopClosure>(oops, 0);
267 _dedup_roots.oops_do(&always_true, oops, 0);
268 }
269
270 void ShenandoahHeapIterationRootScanner::strong_roots_do(OopClosure* oops) {
271 assert(Thread::current()->is_VM_thread(), "Only by VM thread");
272 // Must use _claim_none to avoid interfering with concurrent CLDG iteration
273 CLDToOopClosure clds(oops, ClassLoaderData::_claim_none);
274 MarkingCodeBlobClosure code(oops, !CodeBlobToOopClosure::FixRelocations);
275 ShenandoahParallelOopsDoThreadClosure tc_cl(oops, &code, NULL);
276 ResourceMark rm;
277
278 _serial_roots.oops_do(oops, 0);
279 _vm_roots.oops_do(oops, 0);
280 _cld_roots.always_strong_cld_do(&clds, 0);
281 _thread_roots.threads_do(&tc_cl, 0);
282 }
|
249
250 void ShenandoahHeapIterationRootScanner::roots_do(OopClosure* oops) {
251 assert(Thread::current()->is_VM_thread(), "Only by VM thread");
252 // Must use _claim_none to avoid interfering with concurrent CLDG iteration
253 CLDToOopClosure clds(oops, ClassLoaderData::_claim_none);
254 MarkingCodeBlobClosure code(oops, !CodeBlobToOopClosure::FixRelocations);
255 ShenandoahParallelOopsDoThreadClosure tc_cl(oops, &code, NULL);
256 AlwaysTrueClosure always_true;
257 ResourceMark rm;
258
259 _serial_roots.oops_do(oops, 0);
260 _vm_roots.oops_do(oops, 0);
261 _cld_roots.cld_do(&clds, 0);
262 _thread_roots.threads_do(&tc_cl, 0);
263 _code_roots.code_blobs_do(&code, 0);
264
265 _serial_weak_roots.weak_oops_do(oops, 0);
266 _weak_roots.oops_do<OopClosure>(oops, 0);
267 _dedup_roots.oops_do(&always_true, oops, 0);
268 }
|