< 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 >