264
265 void ShenandoahHeapIterationRootScanner::roots_do(OopClosure* oops) {
266 assert(Thread::current()->is_VM_thread(), "Only by VM thread");
267 // Must use _claim_none to avoid interfering with concurrent CLDG iteration
268 CLDToOopClosure clds(oops, ClassLoaderData::_claim_none);
269 MarkingCodeBlobClosure code(oops, !CodeBlobToOopClosure::FixRelocations);
270 ShenandoahParallelOopsDoThreadClosure tc_cl(oops, &code, NULL);
271 AlwaysTrueClosure always_true;
272 ResourceMark rm;
273
274 _serial_roots.oops_do(oops, 0);
275 _vm_roots.oops_do(oops, 0);
276 _cld_roots.cld_do(&clds, 0);
277 _thread_roots.threads_do(&tc_cl, 0);
278 _code_roots.code_blobs_do(&code, 0);
279
280 _serial_weak_roots.weak_oops_do(oops, 0);
281 _weak_roots.oops_do<OopClosure>(oops, 0);
282 _dedup_roots.oops_do(&always_true, oops, 0);
283 }
284
285 void ShenandoahHeapIterationRootScanner::strong_roots_do(OopClosure* oops) {
286 assert(Thread::current()->is_VM_thread(), "Only by VM thread");
287 // Must use _claim_none to avoid interfering with concurrent CLDG iteration
288 CLDToOopClosure clds(oops, ClassLoaderData::_claim_none);
289 MarkingCodeBlobClosure code(oops, !CodeBlobToOopClosure::FixRelocations);
290 ShenandoahParallelOopsDoThreadClosure tc_cl(oops, &code, NULL);
291 ResourceMark rm;
292
293 _serial_roots.oops_do(oops, 0);
294 _vm_roots.oops_do(oops, 0);
295 _cld_roots.always_strong_cld_do(&clds, 0);
296 _thread_roots.threads_do(&tc_cl, 0);
297 }
|
264
265 void ShenandoahHeapIterationRootScanner::roots_do(OopClosure* oops) {
266 assert(Thread::current()->is_VM_thread(), "Only by VM thread");
267 // Must use _claim_none to avoid interfering with concurrent CLDG iteration
268 CLDToOopClosure clds(oops, ClassLoaderData::_claim_none);
269 MarkingCodeBlobClosure code(oops, !CodeBlobToOopClosure::FixRelocations);
270 ShenandoahParallelOopsDoThreadClosure tc_cl(oops, &code, NULL);
271 AlwaysTrueClosure always_true;
272 ResourceMark rm;
273
274 _serial_roots.oops_do(oops, 0);
275 _vm_roots.oops_do(oops, 0);
276 _cld_roots.cld_do(&clds, 0);
277 _thread_roots.threads_do(&tc_cl, 0);
278 _code_roots.code_blobs_do(&code, 0);
279
280 _serial_weak_roots.weak_oops_do(oops, 0);
281 _weak_roots.oops_do<OopClosure>(oops, 0);
282 _dedup_roots.oops_do(&always_true, oops, 0);
283 }
|