8229474: Shenandoah: Cleanup CM::update_roots()

Reviewed-by: rkennke
This commit is contained in:
Zhengyu Gu 2019-08-13 13:01:41 -04:00
parent 6d63995ada
commit 320eaaccc4
5 changed files with 9 additions and 25 deletions

View file

@ -276,20 +276,9 @@ void ShenandoahConcurrentMark::mark_roots(ShenandoahPhaseTimings::Phase root_pha
void ShenandoahConcurrentMark::update_roots(ShenandoahPhaseTimings::Phase root_phase) { void ShenandoahConcurrentMark::update_roots(ShenandoahPhaseTimings::Phase root_phase) {
assert(ShenandoahSafepoint::is_at_shenandoah_safepoint(), "Must be at a safepoint"); assert(ShenandoahSafepoint::is_at_shenandoah_safepoint(), "Must be at a safepoint");
assert(root_phase == ShenandoahPhaseTimings::full_gc_roots ||
bool update_code_cache = true; // initialize to safer value root_phase == ShenandoahPhaseTimings::degen_gc_update_roots,
switch (root_phase) { "Only for these phases");
case ShenandoahPhaseTimings::update_roots:
case ShenandoahPhaseTimings::final_update_refs_roots:
update_code_cache = false;
break;
case ShenandoahPhaseTimings::full_gc_roots:
case ShenandoahPhaseTimings::degen_gc_update_roots:
update_code_cache = true;
break;
default:
ShouldNotReachHere();
}
ShenandoahGCPhase phase(root_phase); ShenandoahGCPhase phase(root_phase);
@ -299,7 +288,7 @@ void ShenandoahConcurrentMark::update_roots(ShenandoahPhaseTimings::Phase root_p
uint nworkers = _heap->workers()->active_workers(); uint nworkers = _heap->workers()->active_workers();
ShenandoahRootUpdater root_updater(nworkers, root_phase, update_code_cache); ShenandoahRootUpdater root_updater(nworkers, root_phase);
ShenandoahUpdateRootsTask update_roots(&root_updater); ShenandoahUpdateRootsTask update_roots(&root_updater);
_heap->workers()->run_task(&update_roots); _heap->workers()->run_task(&update_roots);

View file

@ -184,10 +184,9 @@ void ShenandoahRootEvacuator::roots_do(uint worker_id, OopClosure* oops) {
_dedup_roots.oops_do(&always_true, oops, worker_id); _dedup_roots.oops_do(&always_true, oops, worker_id);
} }
ShenandoahRootUpdater::ShenandoahRootUpdater(uint n_workers, ShenandoahPhaseTimings::Phase phase, bool update_code_cache) : ShenandoahRootUpdater::ShenandoahRootUpdater(uint n_workers, ShenandoahPhaseTimings::Phase phase) :
ShenandoahRootProcessor(phase), ShenandoahRootProcessor(phase),
_thread_roots(n_workers > 1), _thread_roots(n_workers > 1) {
_update_code_cache(update_code_cache) {
} }
ShenandoahRootAdjuster::ShenandoahRootAdjuster(uint n_workers, ShenandoahPhaseTimings::Phase phase) : ShenandoahRootAdjuster::ShenandoahRootAdjuster(uint n_workers, ShenandoahPhaseTimings::Phase phase) :

View file

@ -295,10 +295,9 @@ private:
ShenandoahWeakRoots<false /*concurrent*/> _weak_roots; ShenandoahWeakRoots<false /*concurrent*/> _weak_roots;
ShenandoahStringDedupRoots _dedup_roots; ShenandoahStringDedupRoots _dedup_roots;
ShenandoahCodeCacheRoots<ShenandoahCsetCodeRootsIterator> _code_roots; ShenandoahCodeCacheRoots<ShenandoahCsetCodeRootsIterator> _code_roots;
const bool _update_code_cache;
public: public:
ShenandoahRootUpdater(uint n_workers, ShenandoahPhaseTimings::Phase phase, bool update_code_cache); ShenandoahRootUpdater(uint n_workers, ShenandoahPhaseTimings::Phase phase);
template<typename IsAlive, typename KeepAlive> template<typename IsAlive, typename KeepAlive>
void roots_do(uint worker_id, IsAlive* is_alive, KeepAlive* keep_alive); void roots_do(uint worker_id, IsAlive* is_alive, KeepAlive* keep_alive);

View file

@ -272,10 +272,7 @@ void ShenandoahRootUpdater::roots_do(uint worker_id, IsAlive* is_alive, KeepAliv
_thread_roots.oops_do(keep_alive, NULL, worker_id); _thread_roots.oops_do(keep_alive, NULL, worker_id);
_cld_roots.cld_do(&clds, worker_id); _cld_roots.cld_do(&clds, worker_id);
_code_roots.code_blobs_do(&update_blobs, worker_id);
if(_update_code_cache) {
_code_roots.code_blobs_do(&update_blobs, worker_id);
}
_serial_weak_roots.weak_oops_do(is_alive, keep_alive, worker_id); _serial_weak_roots.weak_oops_do(is_alive, keep_alive, worker_id);
_weak_roots.weak_oops_do(is_alive, keep_alive, worker_id); _weak_roots.weak_oops_do(is_alive, keep_alive, worker_id);

View file

@ -706,7 +706,7 @@ void ShenandoahTraversalGC::fixup_roots() {
#if COMPILER2_OR_JVMCI #if COMPILER2_OR_JVMCI
DerivedPointerTable::clear(); DerivedPointerTable::clear();
#endif #endif
ShenandoahRootUpdater rp(_heap->workers()->active_workers(), ShenandoahPhaseTimings::final_traversal_update_roots, true /* update code cache */); ShenandoahRootUpdater rp(_heap->workers()->active_workers(), ShenandoahPhaseTimings::final_traversal_update_roots);
ShenandoahTraversalFixRootsTask update_roots_task(&rp); ShenandoahTraversalFixRootsTask update_roots_task(&rp);
_heap->workers()->run_task(&update_roots_task); _heap->workers()->run_task(&update_roots_task);
#if COMPILER2_OR_JVMCI #if COMPILER2_OR_JVMCI