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); |