< prev index next > src/hotspot/share/gc/shenandoah/shenandoahRootProcessor.cpp
Print this page
assert(ShenandoahHeap::heap()->is_full_gc_in_progress(), "Full GC only");
}
void ShenandoahRootAdjuster::roots_do(uint worker_id, OopClosure* oops) {
NMethodToOopClosure code_blob_cl(oops, NMethodToOopClosure::FixRelocations);
- ShenandoahNMethodAndDisarmClosure nmethods_and_disarm_Cl(oops);
CLDToOopClosure adjust_cld_closure(oops, ClassLoaderData::_claim_strong);
// Process light-weight/limited parallel roots then
_vm_roots.oops_do(oops, worker_id);
_weak_roots.oops_do<OopClosure>(oops, worker_id);
_cld_roots.cld_do(&adjust_cld_closure, worker_id);
// Process heavy-weight/fully parallel roots the last
! _code_roots.nmethods_do(&nmethods_and_disarm_Cl, worker_id);
_thread_roots.oops_do(oops, nullptr, worker_id);
}
ShenandoahHeapIterationRootScanner::ShenandoahHeapIterationRootScanner(uint n_workers) :
ShenandoahRootProcessor(ShenandoahPhaseTimings::heap_iteration_roots),
assert(ShenandoahHeap::heap()->is_full_gc_in_progress(), "Full GC only");
}
void ShenandoahRootAdjuster::roots_do(uint worker_id, OopClosure* oops) {
NMethodToOopClosure code_blob_cl(oops, NMethodToOopClosure::FixRelocations);
CLDToOopClosure adjust_cld_closure(oops, ClassLoaderData::_claim_strong);
// Process light-weight/limited parallel roots then
_vm_roots.oops_do(oops, worker_id);
_weak_roots.oops_do<OopClosure>(oops, worker_id);
_cld_roots.cld_do(&adjust_cld_closure, worker_id);
// Process heavy-weight/fully parallel roots the last
! _code_roots.nmethods_do(&code_blob_cl, worker_id);
_thread_roots.oops_do(oops, nullptr, worker_id);
}
ShenandoahHeapIterationRootScanner::ShenandoahHeapIterationRootScanner(uint n_workers) :
ShenandoahRootProcessor(ShenandoahPhaseTimings::heap_iteration_roots),
// Make sure it only sees to-space objects
_bs_nm->nmethod_entry_barrier(nm);
}
ShenandoahNMethod* const snm = ShenandoahNMethod::gc_data(nm);
assert(snm != nullptr, "Sanity");
! snm->oops_do(_oops, false /*fix_relocations*/);
}
};
void ShenandoahHeapIterationRootScanner::roots_do(OopClosure* oops) {
// Must use _claim_other to avoid interfering with concurrent CLDG iteration
// Make sure it only sees to-space objects
_bs_nm->nmethod_entry_barrier(nm);
}
ShenandoahNMethod* const snm = ShenandoahNMethod::gc_data(nm);
assert(snm != nullptr, "Sanity");
! snm->oops_do(_oops, /* fix_relocations = */ false, /* icic = */ nullptr);
}
};
void ShenandoahHeapIterationRootScanner::roots_do(OopClosure* oops) {
// Must use _claim_other to avoid interfering with concurrent CLDG iteration
< prev index next >