109 BasicOopIterateClosure(ReferenceDiscoverer* rd = NULL) : OopIterateClosure(rd) {}
110
111 virtual bool do_metadata() { return false; }
112 virtual void do_klass(Klass* k) { ShouldNotReachHere(); }
113 virtual void do_cld(ClassLoaderData* cld) { ShouldNotReachHere(); }
114 };
115
116 class KlassClosure : public Closure {
117 public:
118 virtual void do_klass(Klass* k) = 0;
119 };
120
121 class CLDClosure : public Closure {
122 public:
123 virtual void do_cld(ClassLoaderData* cld) = 0;
124 };
125
126
127 class CLDToOopClosure : public CLDClosure {
128 OopClosure* _oop_closure;
129 int _cld_claim_value;
130
131 public:
132 CLDToOopClosure(OopClosure* oop_closure,
133 int cld_claim_value) :
134 _oop_closure(oop_closure),
135 _cld_claim_value(cld_claim_value) {}
136
137 void do_cld(ClassLoaderData* cld);
138 };
139
140 // The base class for all concurrent marking closures,
141 // that participates in class unloading.
142 // It's used to proxy through the metadata to the oops defined in them.
143 class MetadataVisitingOopIterateClosure: public OopIterateClosure {
144 public:
145 MetadataVisitingOopIterateClosure(ReferenceDiscoverer* rd = NULL) : OopIterateClosure(rd) { }
146
147 virtual bool do_metadata() { return true; }
148 virtual void do_klass(Klass* k);
149 virtual void do_cld(ClassLoaderData* cld);
150 };
151
152 // ObjectClosure is used for iterating through an object space
153
154 class ObjectClosure : public Closure {
|
109 BasicOopIterateClosure(ReferenceDiscoverer* rd = NULL) : OopIterateClosure(rd) {}
110
111 virtual bool do_metadata() { return false; }
112 virtual void do_klass(Klass* k) { ShouldNotReachHere(); }
113 virtual void do_cld(ClassLoaderData* cld) { ShouldNotReachHere(); }
114 };
115
116 class KlassClosure : public Closure {
117 public:
118 virtual void do_klass(Klass* k) = 0;
119 };
120
121 class CLDClosure : public Closure {
122 public:
123 virtual void do_cld(ClassLoaderData* cld) = 0;
124 };
125
126
127 class CLDToOopClosure : public CLDClosure {
128 OopClosure* _oop_closure;
129 int _cld_claim;
130
131 public:
132 CLDToOopClosure(OopClosure* oop_closure,
133 int cld_claim) :
134 _oop_closure(oop_closure),
135 _cld_claim(cld_claim) {}
136
137 void do_cld(ClassLoaderData* cld);
138 };
139
140 // The base class for all concurrent marking closures,
141 // that participates in class unloading.
142 // It's used to proxy through the metadata to the oops defined in them.
143 class MetadataVisitingOopIterateClosure: public OopIterateClosure {
144 public:
145 MetadataVisitingOopIterateClosure(ReferenceDiscoverer* rd = NULL) : OopIterateClosure(rd) { }
146
147 virtual bool do_metadata() { return true; }
148 virtual void do_klass(Klass* k);
149 virtual void do_cld(ClassLoaderData* cld);
150 };
151
152 // ObjectClosure is used for iterating through an object space
153
154 class ObjectClosure : public Closure {
|