< prev index next >
src/hotspot/share/gc/shenandoah/shenandoahRootProcessor.cpp
Print this page
rev 54386 : 8221766: Load-reference barriers for Shenandoah
*** 240,256 ****
ShenandoahRootEvacuator::ShenandoahRootEvacuator(ShenandoahHeap* heap, uint n_workers, ShenandoahPhaseTimings::Phase phase) :
_evacuation_tasks(new SubTasksDone(SHENANDOAH_EVAC_NumElements)),
_srs(n_workers),
_phase(phase),
! _coderoots_cset_iterator(ShenandoahCodeRoots::cset_iterator())
{
heap->phase_timings()->record_workers_start(_phase);
}
ShenandoahRootEvacuator::~ShenandoahRootEvacuator() {
delete _evacuation_tasks;
ShenandoahHeap::heap()->phase_timings()->record_workers_end(_phase);
}
void ShenandoahRootEvacuator::process_evacuate_roots(OopClosure* oops,
CodeBlobClosure* blobs,
--- 240,264 ----
ShenandoahRootEvacuator::ShenandoahRootEvacuator(ShenandoahHeap* heap, uint n_workers, ShenandoahPhaseTimings::Phase phase) :
_evacuation_tasks(new SubTasksDone(SHENANDOAH_EVAC_NumElements)),
_srs(n_workers),
_phase(phase),
! _coderoots_cset_iterator(ShenandoahCodeRoots::cset_iterator()),
! _par_state_string(StringTable::weak_storage())
!
{
heap->phase_timings()->record_workers_start(_phase);
+ if (ShenandoahStringDedup::is_enabled()) {
+ StringDedup::gc_prologue(false);
+ }
}
ShenandoahRootEvacuator::~ShenandoahRootEvacuator() {
delete _evacuation_tasks;
+ if (ShenandoahStringDedup::is_enabled()) {
+ StringDedup::gc_epilogue();
+ }
ShenandoahHeap::heap()->phase_timings()->record_workers_end(_phase);
}
void ShenandoahRootEvacuator::process_evacuate_roots(OopClosure* oops,
CodeBlobClosure* blobs,
*** 268,282 ****
if (blobs != NULL) {
ShenandoahWorkerTimingsTracker timer(worker_times, ShenandoahPhaseTimings::CodeCacheRoots, worker_id);
_coderoots_cset_iterator.possibly_parallel_blobs_do(blobs);
}
! if (_evacuation_tasks->try_claim_task(SHENANDOAH_EVAC_jvmti_oops_do)) {
ShenandoahForwardedIsAliveClosure is_alive;
ShenandoahWorkerTimingsTracker timer(worker_times, ShenandoahPhaseTimings::JVMTIRoots, worker_id);
JvmtiExport::weak_oops_do(&is_alive, oops);
}
}
uint ShenandoahRootEvacuator::n_workers() const {
return _srs.n_threads();
}
--- 276,317 ----
if (blobs != NULL) {
ShenandoahWorkerTimingsTracker timer(worker_times, ShenandoahPhaseTimings::CodeCacheRoots, worker_id);
_coderoots_cset_iterator.possibly_parallel_blobs_do(blobs);
}
! if (ShenandoahStringDedup::is_enabled()) {
ShenandoahForwardedIsAliveClosure is_alive;
+ ShenandoahStringDedup::parallel_oops_do(&is_alive, oops, worker_id);
+ }
+
+ if (_evacuation_tasks->try_claim_task(SHENANDOAH_EVAC_Universe_oops_do)) {
+ ShenandoahWorkerTimingsTracker timer(worker_times, ShenandoahPhaseTimings::UniverseRoots, worker_id);
+ Universe::oops_do(oops);
+ }
+
+ if (_evacuation_tasks->try_claim_task(SHENANDOAH_EVAC_Management_oops_do)) {
+ ShenandoahWorkerTimingsTracker timer(worker_times, ShenandoahPhaseTimings::ManagementRoots, worker_id);
+ Management::oops_do(oops);
+ }
+
+ if (_evacuation_tasks->try_claim_task(SHENANDOAH_EVAC_jvmti_oops_do)) {
ShenandoahWorkerTimingsTracker timer(worker_times, ShenandoahPhaseTimings::JVMTIRoots, worker_id);
+ JvmtiExport::oops_do(oops);
+ ShenandoahForwardedIsAliveClosure is_alive;
JvmtiExport::weak_oops_do(&is_alive, oops);
}
+
+ if (_evacuation_tasks->try_claim_task(SHENANDOAH_EVAC_SystemDictionary_oops_do)) {
+ ShenandoahWorkerTimingsTracker timer(worker_times, ShenandoahPhaseTimings::SystemDictionaryRoots, worker_id);
+ SystemDictionary::oops_do(oops);
+ }
+
+ if (_evacuation_tasks->try_claim_task(SHENANDOAH_EVAC_ObjectSynchronizer_oops_do)) {
+ ShenandoahWorkerTimingsTracker timer(worker_times, ShenandoahPhaseTimings::ObjectSynchronizerRoots, worker_id);
+ ObjectSynchronizer::oops_do(oops);
+ }
+
}
uint ShenandoahRootEvacuator::n_workers() const {
return _srs.n_threads();
}
< prev index next >