< prev index next >

src/hotspot/share/memory/iterator.hpp

Print this page

 37 class ClassLoaderData;
 38 class Symbol;
 39 class Metadata;
 40 class Thread;
 41 
 42 // The following classes are C++ `closures` for iterating over objects, roots and spaces
 43 
 44 class Closure : public StackObj { };
 45 
 46 // Thread iterator
 47 class ThreadClosure {
 48  public:
 49   virtual void do_thread(Thread* thread) = 0;
 50 };
 51 
 52 // OopClosure is used for iterating through references to Java objects.
 53 class OopClosure : public Closure {
 54  public:
 55   virtual void do_oop(oop* o) = 0;
 56   virtual void do_oop(narrowOop* o) = 0;


 57 };
 58 
 59 class DoNothingClosure : public OopClosure {
 60  public:
 61   virtual void do_oop(oop* p)       {}
 62   virtual void do_oop(narrowOop* p) {}
 63 };
 64 extern DoNothingClosure do_nothing_cl;
 65 
 66 // OopIterateClosure adds extra code to be run during oop iterations.
 67 // This is needed by the GC and is extracted to a separate type to not
 68 // pollute the OopClosure interface.
 69 class OopIterateClosure : public OopClosure {
 70  private:
 71   ReferenceDiscoverer* _ref_discoverer;
 72 
 73  protected:
 74   OopIterateClosure(ReferenceDiscoverer* rd) : _ref_discoverer(rd) { }
 75   OopIterateClosure() : _ref_discoverer(nullptr) { }
 76   ~OopIterateClosure() { }

120   virtual void do_klass(Klass* k) { ShouldNotReachHere(); }
121   virtual void do_cld(ClassLoaderData* cld) { ShouldNotReachHere(); }
122   virtual void do_method(Method* m) { ShouldNotReachHere(); }
123   virtual void do_nmethod(nmethod* nm) { ShouldNotReachHere(); }
124 };
125 
126 // Interface for applying an OopClosure to a set of oops.
127 class OopIterator {
128 public:
129   virtual void oops_do(OopClosure* cl) = 0;
130 };
131 
132 enum class derived_base : intptr_t;
133 enum class derived_pointer : intptr_t;
134 class DerivedOopClosure : public Closure {
135  public:
136   enum { SkipNull = true };
137   virtual void do_derived_oop(derived_base* base, derived_pointer* derived) = 0;
138 };
139 





140 class KlassClosure : public Closure {
141  public:
142   virtual void do_klass(Klass* k) = 0;
143 };
144 
145 class CLDClosure : public Closure {
146  public:
147   virtual void do_cld(ClassLoaderData* cld) = 0;
148 };
149 
150 class MetadataClosure : public Closure {
151  public:
152   virtual void do_metadata(Metadata* md) = 0;
153 };
154 
155 
156 class CLDToOopClosure : public CLDClosure {
157   OopClosure*       _oop_closure;
158   int               _cld_claim;
159 

 37 class ClassLoaderData;
 38 class Symbol;
 39 class Metadata;
 40 class Thread;
 41 
 42 // The following classes are C++ `closures` for iterating over objects, roots and spaces
 43 
 44 class Closure : public StackObj { };
 45 
 46 // Thread iterator
 47 class ThreadClosure {
 48  public:
 49   virtual void do_thread(Thread* thread) = 0;
 50 };
 51 
 52 // OopClosure is used for iterating through references to Java objects.
 53 class OopClosure : public Closure {
 54  public:
 55   virtual void do_oop(oop* o) = 0;
 56   virtual void do_oop(narrowOop* o) = 0;
 57   virtual void do_oop_no_buffering(oop* o) { do_oop(o); }
 58   virtual void do_oop_no_buffering(narrowOop* o) { do_oop(o); }
 59 };
 60 
 61 class DoNothingClosure : public OopClosure {
 62  public:
 63   virtual void do_oop(oop* p)       {}
 64   virtual void do_oop(narrowOop* p) {}
 65 };
 66 extern DoNothingClosure do_nothing_cl;
 67 
 68 // OopIterateClosure adds extra code to be run during oop iterations.
 69 // This is needed by the GC and is extracted to a separate type to not
 70 // pollute the OopClosure interface.
 71 class OopIterateClosure : public OopClosure {
 72  private:
 73   ReferenceDiscoverer* _ref_discoverer;
 74 
 75  protected:
 76   OopIterateClosure(ReferenceDiscoverer* rd) : _ref_discoverer(rd) { }
 77   OopIterateClosure() : _ref_discoverer(nullptr) { }
 78   ~OopIterateClosure() { }

122   virtual void do_klass(Klass* k) { ShouldNotReachHere(); }
123   virtual void do_cld(ClassLoaderData* cld) { ShouldNotReachHere(); }
124   virtual void do_method(Method* m) { ShouldNotReachHere(); }
125   virtual void do_nmethod(nmethod* nm) { ShouldNotReachHere(); }
126 };
127 
128 // Interface for applying an OopClosure to a set of oops.
129 class OopIterator {
130 public:
131   virtual void oops_do(OopClosure* cl) = 0;
132 };
133 
134 enum class derived_base : intptr_t;
135 enum class derived_pointer : intptr_t;
136 class DerivedOopClosure : public Closure {
137  public:
138   enum { SkipNull = true };
139   virtual void do_derived_oop(derived_base* base, derived_pointer* derived) = 0;
140 };
141 
142 class BufferedValueClosure : public Closure {
143 public:
144   virtual void do_buffered_value(oop* p) = 0;
145 };
146 
147 class KlassClosure : public Closure {
148  public:
149   virtual void do_klass(Klass* k) = 0;
150 };
151 
152 class CLDClosure : public Closure {
153  public:
154   virtual void do_cld(ClassLoaderData* cld) = 0;
155 };
156 
157 class MetadataClosure : public Closure {
158  public:
159   virtual void do_metadata(Metadata* md) = 0;
160 };
161 
162 
163 class CLDToOopClosure : public CLDClosure {
164   OopClosure*       _oop_closure;
165   int               _cld_claim;
166 
< prev index next >