< prev index next >

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

Print this page
rev 55971 : 8229474: Shenandoah: Cleanup CM::update_roots()


 689 
 690 public:
 691   ShenandoahTraversalFixRootsTask(ShenandoahRootUpdater* rp) :
 692     AbstractGangTask("Shenandoah traversal fix roots"),
 693     _rp(rp) {
 694     assert(ShenandoahHeap::heap()->has_forwarded_objects(), "Must be");
 695   }
 696 
 697   void work(uint worker_id) {
 698     ShenandoahParallelWorkerSession worker_session(worker_id);
 699     ShenandoahTraversalFixRootsClosure cl;
 700     ShenandoahForwardedIsAliveClosure is_alive;
 701     _rp->roots_do<ShenandoahForwardedIsAliveClosure, ShenandoahTraversalFixRootsClosure>(worker_id, &is_alive, &cl);
 702   }
 703 };
 704 
 705 void ShenandoahTraversalGC::fixup_roots() {
 706 #if COMPILER2_OR_JVMCI
 707   DerivedPointerTable::clear();
 708 #endif
 709   ShenandoahRootUpdater rp(_heap->workers()->active_workers(), ShenandoahPhaseTimings::final_traversal_update_roots, true /* update code cache */);
 710   ShenandoahTraversalFixRootsTask update_roots_task(&rp);
 711   _heap->workers()->run_task(&update_roots_task);
 712 #if COMPILER2_OR_JVMCI
 713   DerivedPointerTable::update_pointers();
 714 #endif
 715 }
 716 
 717 void ShenandoahTraversalGC::reset() {
 718   _task_queues->clear();
 719 }
 720 
 721 ShenandoahObjToScanQueueSet* ShenandoahTraversalGC::task_queues() {
 722   return _task_queues;
 723 }
 724 
 725 class ShenandoahTraversalCancelledGCYieldClosure : public YieldClosure {
 726 private:
 727   ShenandoahHeap* const _heap;
 728 public:
 729   ShenandoahTraversalCancelledGCYieldClosure() : _heap(ShenandoahHeap::heap()) {};




 689 
 690 public:
 691   ShenandoahTraversalFixRootsTask(ShenandoahRootUpdater* rp) :
 692     AbstractGangTask("Shenandoah traversal fix roots"),
 693     _rp(rp) {
 694     assert(ShenandoahHeap::heap()->has_forwarded_objects(), "Must be");
 695   }
 696 
 697   void work(uint worker_id) {
 698     ShenandoahParallelWorkerSession worker_session(worker_id);
 699     ShenandoahTraversalFixRootsClosure cl;
 700     ShenandoahForwardedIsAliveClosure is_alive;
 701     _rp->roots_do<ShenandoahForwardedIsAliveClosure, ShenandoahTraversalFixRootsClosure>(worker_id, &is_alive, &cl);
 702   }
 703 };
 704 
 705 void ShenandoahTraversalGC::fixup_roots() {
 706 #if COMPILER2_OR_JVMCI
 707   DerivedPointerTable::clear();
 708 #endif
 709   ShenandoahRootUpdater rp(_heap->workers()->active_workers(), ShenandoahPhaseTimings::final_traversal_update_roots);
 710   ShenandoahTraversalFixRootsTask update_roots_task(&rp);
 711   _heap->workers()->run_task(&update_roots_task);
 712 #if COMPILER2_OR_JVMCI
 713   DerivedPointerTable::update_pointers();
 714 #endif
 715 }
 716 
 717 void ShenandoahTraversalGC::reset() {
 718   _task_queues->clear();
 719 }
 720 
 721 ShenandoahObjToScanQueueSet* ShenandoahTraversalGC::task_queues() {
 722   return _task_queues;
 723 }
 724 
 725 class ShenandoahTraversalCancelledGCYieldClosure : public YieldClosure {
 726 private:
 727   ShenandoahHeap* const _heap;
 728 public:
 729   ShenandoahTraversalCancelledGCYieldClosure() : _heap(ShenandoahHeap::heap()) {};


< prev index next >