174 public: 175 template <typename T> void do_oop_work(T* p); 176 virtual void do_oop(oop* p); 177 virtual void do_oop(narrowOop* p); 178 179 virtual bool do_metadata() { return true; } 180 virtual void do_klass(Klass* k); 181 virtual void do_cld(ClassLoaderData* cld); 182 183 void set_ref_discoverer(ReferenceDiscoverer* rd) { 184 set_ref_discoverer_internal(rd); 185 } 186 }; 187 188 class AdjustPointerClosure: public BasicOopsInGenClosure { 189 public: 190 template <typename T> void do_oop_work(T* p); 191 virtual void do_oop(oop* p); 192 virtual void do_oop(narrowOop* p); 193 virtual ReferenceIterationMode reference_iteration_mode() { return DO_FIELDS; } 194 195 // This closure provides its own oop verification code. 196 debug_only(virtual bool should_verify_oops() { return false; }) 197 }; 198 199 class PreservedMark { 200 private: 201 oop _obj; 202 markWord _mark; 203 204 public: 205 void init(oop obj, markWord mark) { 206 _obj = obj; 207 _mark = mark; 208 } 209 210 void adjust_pointer(); 211 void restore(); 212 }; 213 214 #endif // SHARE_GC_SERIAL_MARKSWEEP_HPP | 174 public: 175 template <typename T> void do_oop_work(T* p); 176 virtual void do_oop(oop* p); 177 virtual void do_oop(narrowOop* p); 178 179 virtual bool do_metadata() { return true; } 180 virtual void do_klass(Klass* k); 181 virtual void do_cld(ClassLoaderData* cld); 182 183 void set_ref_discoverer(ReferenceDiscoverer* rd) { 184 set_ref_discoverer_internal(rd); 185 } 186 }; 187 188 class AdjustPointerClosure: public BasicOopsInGenClosure { 189 public: 190 template <typename T> void do_oop_work(T* p); 191 virtual void do_oop(oop* p); 192 virtual void do_oop(narrowOop* p); 193 virtual ReferenceIterationMode reference_iteration_mode() { return DO_FIELDS; } 194 }; 195 196 class PreservedMark { 197 private: 198 oop _obj; 199 markWord _mark; 200 201 public: 202 void init(oop obj, markWord mark) { 203 _obj = obj; 204 _mark = mark; 205 } 206 207 void adjust_pointer(); 208 void restore(); 209 }; 210 211 #endif // SHARE_GC_SERIAL_MARKSWEEP_HPP |