152 virtual bool do_metadata() { return false; }
153 };
154
155 class ShenandoahMarkRefsMetadataMatrixClosure : public ShenandoahMarkRefsSuperClosure {
156 public:
157 ShenandoahMarkRefsMetadataMatrixClosure(SCMObjToScanQueue* q, ReferenceProcessor* rp) :
158 ShenandoahMarkRefsSuperClosure(q, rp) {};
159
160 template <class T>
161 inline void do_oop_nv(T* p) { work<T, NONE, true>(p); }
162 virtual void do_oop(narrowOop* p) { do_oop_nv(p); }
163 virtual void do_oop(oop* p) { do_oop_nv(p); }
164 inline bool do_metadata_nv() { return true; }
165 virtual bool do_metadata() { return true; }
166 };
167
168 class ShenandoahUpdateHeapRefsSuperClosure : public ExtendedOopClosure {
169 private:
170 ShenandoahHeap* _heap;
171 public:
172 ShenandoahUpdateHeapRefsSuperClosure() :
173 _heap(ShenandoahHeap::heap()) {}
174
175 template <class T, bool UPDATE_MATRIX>
176 void work(T *p);
177 };
178
179 class ShenandoahUpdateHeapRefsClosure : public ShenandoahUpdateHeapRefsSuperClosure {
180 public:
181 ShenandoahUpdateHeapRefsClosure() : ShenandoahUpdateHeapRefsSuperClosure() {}
182
183 template <class T>
184 inline void do_oop_nv(T* p) { work<T, false>(p); }
185 virtual void do_oop(narrowOop* p) { do_oop_nv(p); }
186 virtual void do_oop(oop* p) { do_oop_nv(p); }
187 };
188
189 class ShenandoahUpdateHeapRefsMatrixClosure : public ShenandoahUpdateHeapRefsSuperClosure {
190 private:
191 ShenandoahHeap* _heap;
192 public:
193 ShenandoahUpdateHeapRefsMatrixClosure() : ShenandoahUpdateHeapRefsSuperClosure() {}
|
152 virtual bool do_metadata() { return false; }
153 };
154
155 class ShenandoahMarkRefsMetadataMatrixClosure : public ShenandoahMarkRefsSuperClosure {
156 public:
157 ShenandoahMarkRefsMetadataMatrixClosure(SCMObjToScanQueue* q, ReferenceProcessor* rp) :
158 ShenandoahMarkRefsSuperClosure(q, rp) {};
159
160 template <class T>
161 inline void do_oop_nv(T* p) { work<T, NONE, true>(p); }
162 virtual void do_oop(narrowOop* p) { do_oop_nv(p); }
163 virtual void do_oop(oop* p) { do_oop_nv(p); }
164 inline bool do_metadata_nv() { return true; }
165 virtual bool do_metadata() { return true; }
166 };
167
168 class ShenandoahUpdateHeapRefsSuperClosure : public ExtendedOopClosure {
169 private:
170 ShenandoahHeap* _heap;
171 public:
172 ShenandoahUpdateHeapRefsSuperClosure();
173
174 template <class T, bool UPDATE_MATRIX>
175 void work(T *p);
176 };
177
178 class ShenandoahUpdateHeapRefsClosure : public ShenandoahUpdateHeapRefsSuperClosure {
179 public:
180 ShenandoahUpdateHeapRefsClosure() : ShenandoahUpdateHeapRefsSuperClosure() {}
181
182 template <class T>
183 inline void do_oop_nv(T* p) { work<T, false>(p); }
184 virtual void do_oop(narrowOop* p) { do_oop_nv(p); }
185 virtual void do_oop(oop* p) { do_oop_nv(p); }
186 };
187
188 class ShenandoahUpdateHeapRefsMatrixClosure : public ShenandoahUpdateHeapRefsSuperClosure {
189 private:
190 ShenandoahHeap* _heap;
191 public:
192 ShenandoahUpdateHeapRefsMatrixClosure() : ShenandoahUpdateHeapRefsSuperClosure() {}
|