< prev index next >

src/hotspot/share/memory/iterator.hpp

Print this page




 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;
 151   }
 152 
 153  public:
 154   KlassToOopClosure(OopClosure* oop_closure = NULL) : _oop_closure(oop_closure) {}
 155 
 156   virtual void do_klass(Klass* k);
 157 };
 158 
 159 class CLDToOopClosure : public CLDClosure {
 160   OopClosure*       _oop_closure;
 161   KlassToOopClosure _klass_closure;
 162   bool              _must_claim_cld;
 163 
 164  public:
 165   CLDToOopClosure(OopClosure* oop_closure, bool must_claim_cld = true) :
 166       _oop_closure(oop_closure),
 167       _klass_closure(oop_closure),
 168       _must_claim_cld(must_claim_cld) {}
 169 
 170   void do_cld(ClassLoaderData* cld);
 171 };
 172 
 173 class CLDToKlassAndOopClosure : public CLDClosure {
 174   friend class G1CollectedHeap;
 175  protected:
 176   OopClosure*   _oop_closure;
 177   KlassClosure* _klass_closure;
 178   bool          _must_claim_cld;
 179  public:
 180   CLDToKlassAndOopClosure(KlassClosure* klass_closure,
 181                           OopClosure* oop_closure,
 182                           bool must_claim_cld) :
 183                               _oop_closure(oop_closure),
 184                               _klass_closure(klass_closure),
 185                               _must_claim_cld(must_claim_cld) {}
 186   void do_cld(ClassLoaderData* cld);
 187 };
 188 
 189 // The base class for all concurrent marking closures,
 190 // that participates in class unloading.
 191 // It's used to proxy through the metadata to the oops defined in them.
 192 class MetadataAwareOopClosure: public ExtendedOopClosure {
 193   KlassToOopClosure _klass_closure;
 194 
 195  public:
 196   MetadataAwareOopClosure() : ExtendedOopClosure() {
 197     _klass_closure.initialize(this);
 198   }
 199   MetadataAwareOopClosure(ReferenceProcessor* rp) : ExtendedOopClosure(rp) {
 200     _klass_closure.initialize(this);
 201   }
 202 
 203   bool do_metadata_nv()      { return true; }
 204   virtual bool do_metadata() { return do_metadata_nv(); }
 205 
 206   void do_klass_nv(Klass* k);
 207   virtual void do_klass(Klass* k) { do_klass_nv(k); }
 208 
 209   void do_cld_nv(ClassLoaderData* cld);
 210   virtual void do_cld(ClassLoaderData* cld) { do_cld_nv(cld); }
 211 };
 212 
 213 // ObjectClosure is used for iterating through an object space
 214 
 215 class ObjectClosure : public Closure {
 216  public:
 217   // Called for each object.
 218   virtual void do_object(oop obj) = 0;
 219 };
 220 
 221 




 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 
 142 class CLDToOopClosure : public CLDClosure {
 143   OopClosure*       _oop_closure;

 144   bool              _must_claim_cld;
 145 
 146  public:
 147   CLDToOopClosure(OopClosure* oop_closure, bool must_claim_cld = true) :
 148       _oop_closure(oop_closure),

 149       _must_claim_cld(must_claim_cld) {}
 150 
 151   void do_cld(ClassLoaderData* cld);
 152 };
 153 
















 154 // The base class for all concurrent marking closures,
 155 // that participates in class unloading.
 156 // It's used to proxy through the metadata to the oops defined in them.
 157 class MetadataAwareOopClosure: public ExtendedOopClosure {

 158 
 159  public:
 160   MetadataAwareOopClosure() : ExtendedOopClosure() { }
 161   MetadataAwareOopClosure(ReferenceProcessor* rp) : ExtendedOopClosure(rp) { }




 162 
 163   bool do_metadata_nv()      { return true; }
 164   virtual bool do_metadata() { return do_metadata_nv(); }
 165 
 166   void do_klass_nv(Klass* k);
 167   virtual void do_klass(Klass* k) { do_klass_nv(k); }
 168 
 169   void do_cld_nv(ClassLoaderData* cld);
 170   virtual void do_cld(ClassLoaderData* cld) { do_cld_nv(cld); }
 171 };
 172 
 173 // ObjectClosure is used for iterating through an object space
 174 
 175 class ObjectClosure : public Closure {
 176  public:
 177   // Called for each object.
 178   virtual void do_object(oop obj) = 0;
 179 };
 180 
 181 


< prev index next >