111 // Can be used by subclasses to turn off the default verification of oop fields. 112 virtual bool should_verify_oops() { return true; } 113 #endif 114 }; 115 116 // Wrapper closure only used to implement oop_iterate_no_header(). 117 class NoHeaderExtendedOopClosure : public ExtendedOopClosure { 118 OopClosure* _wrapped_closure; 119 public: 120 NoHeaderExtendedOopClosure(OopClosure* cl) : _wrapped_closure(cl) {} 121 // Warning: this calls the virtual version do_oop in the the wrapped closure. 122 void do_oop_nv(oop* p) { _wrapped_closure->do_oop(p); } 123 void do_oop_nv(narrowOop* p) { _wrapped_closure->do_oop(p); } 124 125 void do_oop(oop* p) { assert(false, "Only the _nv versions should be used"); 126 _wrapped_closure->do_oop(p); } 127 void do_oop(narrowOop* p) { assert(false, "Only the _nv versions should be used"); 128 _wrapped_closure->do_oop(p);} 129 }; 130 131 class KlassClosure : public Closure { 132 public: 133 virtual void do_klass(Klass* k) = 0; 134 }; 135 136 class CLDClosure : public Closure { 137 public: 138 virtual void do_cld(ClassLoaderData* cld) = 0; 139 }; 140 141 class KlassToOopClosure : public KlassClosure { 142 friend class MetadataAwareOopClosure; 143 friend class MetadataAwareOopsInGenClosure; 144 145 OopClosure* _oop_closure; 146 147 // Used when _oop_closure couldn't be set in an initialization list. 148 void initialize(OopClosure* oop_closure) { 149 assert(_oop_closure == NULL, "Should only be called once"); 150 _oop_closure = oop_closure; | 111 // Can be used by subclasses to turn off the default verification of oop fields. 112 virtual bool should_verify_oops() { return true; } 113 #endif 114 }; 115 116 // Wrapper closure only used to implement oop_iterate_no_header(). 117 class NoHeaderExtendedOopClosure : public ExtendedOopClosure { 118 OopClosure* _wrapped_closure; 119 public: 120 NoHeaderExtendedOopClosure(OopClosure* cl) : _wrapped_closure(cl) {} 121 // Warning: this calls the virtual version do_oop in the the wrapped closure. 122 void do_oop_nv(oop* p) { _wrapped_closure->do_oop(p); } 123 void do_oop_nv(narrowOop* p) { _wrapped_closure->do_oop(p); } 124 125 void do_oop(oop* p) { assert(false, "Only the _nv versions should be used"); 126 _wrapped_closure->do_oop(p); } 127 void do_oop(narrowOop* p) { assert(false, "Only the _nv versions should be used"); 128 _wrapped_closure->do_oop(p);} 129 }; 130 131 class BufferedValueClosure : public Closure { 132 public: 133 virtual void do_buffered_value(oop* p) = 0; 134 }; 135 136 class KlassClosure : public Closure { 137 public: 138 virtual void do_klass(Klass* k) = 0; 139 }; 140 141 class CLDClosure : public Closure { 142 public: 143 virtual void do_cld(ClassLoaderData* cld) = 0; 144 }; 145 146 class KlassToOopClosure : public KlassClosure { 147 friend class MetadataAwareOopClosure; 148 friend class MetadataAwareOopsInGenClosure; 149 150 OopClosure* _oop_closure; 151 152 // Used when _oop_closure couldn't be set in an initialization list. 153 void initialize(OopClosure* oop_closure) { 154 assert(_oop_closure == NULL, "Should only be called once"); 155 _oop_closure = oop_closure; |