< prev index next >

src/share/vm/gc_implementation/parallelScavenge/psScavenge.cpp

Print this page
rev 7858 : 8073543: Circular include dependency between psScavenge.inline.hpp and psPromotionManager.inline.hpp


  88 protected:
  89   MutableSpace* _to_space;
  90   PSPromotionManager* _promotion_manager;
  91 
  92 public:
  93   PSKeepAliveClosure(PSPromotionManager* pm) : _promotion_manager(pm) {
  94     ParallelScavengeHeap* heap = (ParallelScavengeHeap*)Universe::heap();
  95     assert(heap->kind() == CollectedHeap::ParallelScavengeHeap, "Sanity");
  96     _to_space = heap->young_gen()->to_space();
  97 
  98     assert(_promotion_manager != NULL, "Sanity");
  99   }
 100 
 101   template <class T> void do_oop_work(T* p) {
 102     assert (!oopDesc::is_null(*p), "expected non-null ref");
 103     assert ((oopDesc::load_decode_heap_oop_not_null(p))->is_oop(),
 104             "expected an oop while scanning weak refs");
 105 
 106     // Weak refs may be visited more than once.
 107     if (PSScavenge::should_scavenge(p, _to_space)) {
 108       PSScavenge::copy_and_push_safe_barrier<T, /*promote_immediately=*/false>(_promotion_manager, p);
 109     }
 110   }
 111   virtual void do_oop(oop* p)       { PSKeepAliveClosure::do_oop_work(p); }
 112   virtual void do_oop(narrowOop* p) { PSKeepAliveClosure::do_oop_work(p); }
 113 };
 114 
 115 class PSEvacuateFollowersClosure: public VoidClosure {
 116  private:
 117   PSPromotionManager* _promotion_manager;
 118  public:
 119   PSEvacuateFollowersClosure(PSPromotionManager* pm) : _promotion_manager(pm) {}
 120 
 121   virtual void do_void() {
 122     assert(_promotion_manager != NULL, "Sanity");
 123     _promotion_manager->drain_stacks(true);
 124     guarantee(_promotion_manager->stacks_empty(),
 125               "stacks should be empty at this point");
 126   }
 127 };
 128 




  88 protected:
  89   MutableSpace* _to_space;
  90   PSPromotionManager* _promotion_manager;
  91 
  92 public:
  93   PSKeepAliveClosure(PSPromotionManager* pm) : _promotion_manager(pm) {
  94     ParallelScavengeHeap* heap = (ParallelScavengeHeap*)Universe::heap();
  95     assert(heap->kind() == CollectedHeap::ParallelScavengeHeap, "Sanity");
  96     _to_space = heap->young_gen()->to_space();
  97 
  98     assert(_promotion_manager != NULL, "Sanity");
  99   }
 100 
 101   template <class T> void do_oop_work(T* p) {
 102     assert (!oopDesc::is_null(*p), "expected non-null ref");
 103     assert ((oopDesc::load_decode_heap_oop_not_null(p))->is_oop(),
 104             "expected an oop while scanning weak refs");
 105 
 106     // Weak refs may be visited more than once.
 107     if (PSScavenge::should_scavenge(p, _to_space)) {
 108       _promotion_manager->copy_and_push_safe_barrier<T, /*promote_immediately=*/false>(p);
 109     }
 110   }
 111   virtual void do_oop(oop* p)       { PSKeepAliveClosure::do_oop_work(p); }
 112   virtual void do_oop(narrowOop* p) { PSKeepAliveClosure::do_oop_work(p); }
 113 };
 114 
 115 class PSEvacuateFollowersClosure: public VoidClosure {
 116  private:
 117   PSPromotionManager* _promotion_manager;
 118  public:
 119   PSEvacuateFollowersClosure(PSPromotionManager* pm) : _promotion_manager(pm) {}
 120 
 121   virtual void do_void() {
 122     assert(_promotion_manager != NULL, "Sanity");
 123     _promotion_manager->drain_stacks(true);
 124     guarantee(_promotion_manager->stacks_empty(),
 125               "stacks should be empty at this point");
 126   }
 127 };
 128 


< prev index next >