src/share/vm/gc_implementation/concurrentMarkSweep/cmsOopClosures.hpp

Print this page




  41 #define DO_OOP_WORK_DEFN \
  42   void do_oop(oop obj);                                   \
  43   template <class T> inline void do_oop_work(T* p) {      \
  44     T heap_oop = oopDesc::load_heap_oop(p);               \
  45     if (!oopDesc::is_null(heap_oop)) {                    \
  46       oop obj = oopDesc::decode_heap_oop_not_null(heap_oop);       \
  47       do_oop(obj);                                        \
  48     }                                                     \
  49   }
  50 
  51 class MarkRefsIntoClosure: public OopsInGenClosure {
  52  private:
  53   const MemRegion _span;
  54   CMSBitMap*      _bitMap;
  55  protected:
  56   DO_OOP_WORK_DEFN
  57  public:
  58   MarkRefsIntoClosure(MemRegion span, CMSBitMap* bitMap);
  59   virtual void do_oop(oop* p);
  60   virtual void do_oop(narrowOop* p);
  61   inline void do_oop_nv(oop* p)       { MarkRefsIntoClosure::do_oop_work(p); }
  62   inline void do_oop_nv(narrowOop* p) { MarkRefsIntoClosure::do_oop_work(p); }














  63   bool do_header() { return true; }
  64   Prefetch::style prefetch_style() {
  65     return Prefetch::do_read;
  66   }
  67 };
  68 
  69 // A variant of the above used in certain kinds of CMS
  70 // marking verification.
  71 class MarkRefsIntoVerifyClosure: public OopsInGenClosure {
  72  private:
  73   const MemRegion _span;
  74   CMSBitMap*      _verification_bm;
  75   CMSBitMap*      _cms_bm;
  76  protected:
  77   DO_OOP_WORK_DEFN
  78  public:
  79   MarkRefsIntoVerifyClosure(MemRegion span, CMSBitMap* verification_bm,
  80                             CMSBitMap* cms_bm);
  81   virtual void do_oop(oop* p);
  82   virtual void do_oop(narrowOop* p);




  41 #define DO_OOP_WORK_DEFN \
  42   void do_oop(oop obj);                                   \
  43   template <class T> inline void do_oop_work(T* p) {      \
  44     T heap_oop = oopDesc::load_heap_oop(p);               \
  45     if (!oopDesc::is_null(heap_oop)) {                    \
  46       oop obj = oopDesc::decode_heap_oop_not_null(heap_oop);       \
  47       do_oop(obj);                                        \
  48     }                                                     \
  49   }
  50 
  51 class MarkRefsIntoClosure: public OopsInGenClosure {
  52  private:
  53   const MemRegion _span;
  54   CMSBitMap*      _bitMap;
  55  protected:
  56   DO_OOP_WORK_DEFN
  57  public:
  58   MarkRefsIntoClosure(MemRegion span, CMSBitMap* bitMap);
  59   virtual void do_oop(oop* p);
  60   virtual void do_oop(narrowOop* p);
  61 
  62   Prefetch::style prefetch_style() {
  63     return Prefetch::do_read;
  64   }
  65 };
  66 
  67 class Par_MarkRefsIntoClosure: public OopsInGenClosure {
  68  private:
  69   const MemRegion _span;
  70   CMSBitMap*      _bitMap;
  71  protected:
  72   DO_OOP_WORK_DEFN
  73  public:
  74   Par_MarkRefsIntoClosure(MemRegion span, CMSBitMap* bitMap);
  75   virtual void do_oop(oop* p);
  76   virtual void do_oop(narrowOop* p);
  77   bool do_header() { return true; }
  78   Prefetch::style prefetch_style() {
  79     return Prefetch::do_read;
  80   }
  81 };
  82 
  83 // A variant of the above used in certain kinds of CMS
  84 // marking verification.
  85 class MarkRefsIntoVerifyClosure: public OopsInGenClosure {
  86  private:
  87   const MemRegion _span;
  88   CMSBitMap*      _verification_bm;
  89   CMSBitMap*      _cms_bm;
  90  protected:
  91   DO_OOP_WORK_DEFN
  92  public:
  93   MarkRefsIntoVerifyClosure(MemRegion span, CMSBitMap* verification_bm,
  94                             CMSBitMap* cms_bm);
  95   virtual void do_oop(oop* p);
  96   virtual void do_oop(narrowOop* p);