< prev index next >

src/hotspot/share/gc/shenandoah/shenandoahHeap.cpp

Print this page
rev 52371 : [mq]: lvb.patch

*** 382,392 **** --- 382,396 ---- _alloc_seq_at_last_gc_end(0), _used_at_last_gc(0) { log_info(gc, init)("GC threads: " UINT32_FORMAT " parallel, " UINT32_FORMAT " concurrent", ParallelGCThreads, ConcGCThreads); log_info(gc, init)("Reference processing: %s", ParallelRefProcEnabled ? "parallel" : "serial"); + if (ShenandoahLoadRefBarrier) { + BarrierSet::set_barrier_set(new ShenandoahLRBBarrierSet(this)); + } else { BarrierSet::set_barrier_set(new ShenandoahBarrierSet(this)); + } _max_workers = MAX2(_max_workers, 1U); _workers = new ShenandoahWorkGang("Shenandoah GC Threads", _max_workers, /* are_GC_task_threads */true, /* are_ConcurrentGC_threads */false);
*** 1124,1133 **** --- 1128,1157 ---- MarkingCodeBlobClosure blobsCl(&cl, CodeBlobToOopClosure::FixRelocations); _rp->process_evacuate_roots(&cl, &blobsCl, worker_id); } }; + class ShenandoahEvacuateUpdateAllRootsTask : public AbstractGangTask { + ShenandoahRootProcessor* _rp; + public: + + ShenandoahEvacuateUpdateAllRootsTask(ShenandoahRootProcessor* rp) : + AbstractGangTask("Shenandoah evacuate and update all roots"), + _rp(rp) { + // Nothing else to do. + } + + void work(uint worker_id) { + ShenandoahEvacOOMScope oom_evac_scope; + ShenandoahEvacuateUpdateRootsClosure cl; + CLDToOopClosure cldCl(&cl); + // MarkingCodeBlobClosure blobsCl(&cl, CodeBlobToOopClosure::FixRelocations); + CodeBlobToOopClosure blobsCl(&cl, CodeBlobToOopClosure::FixRelocations); + _rp->process_all_roots(&cl, &cl, &cldCl, &blobsCl, NULL, worker_id); + } + }; + class ShenandoahFixRootsTask : public AbstractGangTask { ShenandoahRootEvacuator* _rp; public: ShenandoahFixRootsTask(ShenandoahRootEvacuator* rp) :
*** 1145,1162 **** _rp->process_evacuate_roots(&cl, &blobsCl, worker_id); } }; void ShenandoahHeap::evacuate_and_update_roots() { #if defined(COMPILER2) || INCLUDE_JVMCI DerivedPointerTable::clear(); #endif assert(ShenandoahSafepoint::is_at_shenandoah_safepoint(), "Only iterate roots while world is stopped"); ! { ShenandoahRootEvacuator rp(this, workers()->active_workers(), ShenandoahPhaseTimings::init_evac); ShenandoahEvacuateUpdateRootsTask roots_task(&rp); workers()->run_task(&roots_task); } --- 1169,1210 ---- _rp->process_evacuate_roots(&cl, &blobsCl, worker_id); } }; + class ShenandoahFixAllRootsTask : public AbstractGangTask { + ShenandoahRootProcessor* _rp; + public: + + ShenandoahFixAllRootsTask(ShenandoahRootProcessor* rp) : + AbstractGangTask("Shenandoah update all roots"), + _rp(rp) + { + // Nothing else to do. + } + + void work(uint worker_id) { + ShenandoahEvacOOMScope oom_evac_scope; + ShenandoahUpdateRefsClosure cl; + CLDToOopClosure cldCl(&cl); + MarkingCodeBlobClosure blobsCl(&cl, CodeBlobToOopClosure::FixRelocations); + _rp->process_all_roots(&cl, &cl, &cldCl, &blobsCl, NULL, worker_id); + } + }; + void ShenandoahHeap::evacuate_and_update_roots() { #if defined(COMPILER2) || INCLUDE_JVMCI DerivedPointerTable::clear(); #endif assert(ShenandoahSafepoint::is_at_shenandoah_safepoint(), "Only iterate roots while world is stopped"); ! if (ShenandoahLoadRefBarrier) { ! ShenandoahRootProcessor rp(this, workers()->active_workers(), ShenandoahPhaseTimings::init_evac); ! ShenandoahEvacuateUpdateAllRootsTask roots_task(&rp); ! workers()->run_task(&roots_task); ! } else { ShenandoahRootEvacuator rp(this, workers()->active_workers(), ShenandoahPhaseTimings::init_evac); ShenandoahEvacuateUpdateRootsTask roots_task(&rp); workers()->run_task(&roots_task); }
*** 1179,1191 **** --- 1227,1245 ---- // clear() and update_pointers() must always be called in pairs, // cannot nest with above clear()/update_pointers(). #if defined(COMPILER2) || INCLUDE_JVMCI DerivedPointerTable::clear(); #endif + if (ShenandoahLoadRefBarrier) { + ShenandoahRootProcessor rp(this, workers()->active_workers(), ShenandoahPhaseTimings::init_evac); + ShenandoahFixAllRootsTask update_roots_task(&rp); + workers()->run_task(&update_roots_task); + } else { ShenandoahRootEvacuator rp(this, workers()->active_workers(), ShenandoahPhaseTimings::init_evac); ShenandoahFixRootsTask update_roots_task(&rp); workers()->run_task(&update_roots_task); + } #if defined(COMPILER2) || INCLUDE_JVMCI DerivedPointerTable::update_pointers(); #endif }
< prev index next >