39 class DataLayout;
40 class SerialOldTracer;
41 class STWGCTimer;
42
43 // MarkSweep takes care of global mark-compact garbage collection for a
44 // GenCollectedHeap using a four-phase pointer forwarding algorithm. All
45 // generations are assumed to support marking; those that can also support
46 // compaction.
47 //
48 // Class unloading will only occur when a full gc is invoked.
49
50 // declared at end
51 class PreservedMark;
52 class MarkAndPushClosure;
53 class AdjustPointerClosure;
54
55 class MarkSweep : AllStatic {
56 //
57 // Inline closure decls
58 //
59 class FollowRootClosure: public OopsInGenClosure {
60 public:
61 virtual void do_oop(oop* p);
62 virtual void do_oop(narrowOop* p);
63 };
64
65 class FollowStackClosure: public VoidClosure {
66 public:
67 virtual void do_void();
68 };
69
70 // Used for java/lang/ref handling
71 class IsAliveClosure: public BoolObjectClosure {
72 public:
73 virtual bool do_object_b(oop p);
74 };
75
76 class KeepAliveClosure: public OopClosure {
77 protected:
78 template <class T> void do_oop_work(T* p);
79 public:
153 template <class T> static inline void adjust_pointer(T* p);
154
155 // Check mark and maybe push on marking stack
156 template <class T> static void mark_and_push(T* p);
157
158 private:
159 // Call backs for marking
160 static void mark_object(oop obj);
161 // Mark pointer and follow contents. Empty marking stack afterwards.
162 template <class T> static inline void follow_root(T* p);
163
164 static inline void push_objarray(oop obj, size_t index);
165
166 static void follow_object(oop obj);
167
168 static void follow_array(objArrayOop array);
169
170 static void follow_array_chunk(objArrayOop array, int index);
171 };
172
173 class MarkAndPushClosure: public ExtendedOopClosure {
174 public:
175 template <typename T> void do_oop_nv(T* p);
176 virtual void do_oop(oop* p);
177 virtual void do_oop(narrowOop* p);
178
179 virtual bool do_metadata();
180 bool do_metadata_nv();
181
182 virtual void do_klass(Klass* k);
183 void do_klass_nv(Klass* k);
184
185 virtual void do_cld(ClassLoaderData* cld);
186 void do_cld_nv(ClassLoaderData* cld);
187
188 void set_ref_discoverer(ReferenceDiscoverer* rd) {
189 set_ref_discoverer_internal(rd);
190 }
191 };
192
193 class AdjustPointerClosure: public OopsInGenClosure {
194 public:
195 template <typename T> void do_oop_nv(T* p);
196 virtual void do_oop(oop* p);
197 virtual void do_oop(narrowOop* p);
198 virtual ReferenceIterationMode reference_iteration_mode() { return DO_FIELDS; }
199
200 // This closure provides its own oop verification code.
201 debug_only(virtual bool should_verify_oops() { return false; })
202 };
203
204 class PreservedMark {
205 private:
206 oop _obj;
207 markOop _mark;
208
209 public:
210 void init(oop obj, markOop mark) {
211 _obj = obj;
212 _mark = mark;
213 }
214
215 void adjust_pointer();
|
39 class DataLayout;
40 class SerialOldTracer;
41 class STWGCTimer;
42
43 // MarkSweep takes care of global mark-compact garbage collection for a
44 // GenCollectedHeap using a four-phase pointer forwarding algorithm. All
45 // generations are assumed to support marking; those that can also support
46 // compaction.
47 //
48 // Class unloading will only occur when a full gc is invoked.
49
50 // declared at end
51 class PreservedMark;
52 class MarkAndPushClosure;
53 class AdjustPointerClosure;
54
55 class MarkSweep : AllStatic {
56 //
57 // Inline closure decls
58 //
59 class FollowRootClosure: public BasicOopsInGenClosure {
60 public:
61 virtual void do_oop(oop* p);
62 virtual void do_oop(narrowOop* p);
63 };
64
65 class FollowStackClosure: public VoidClosure {
66 public:
67 virtual void do_void();
68 };
69
70 // Used for java/lang/ref handling
71 class IsAliveClosure: public BoolObjectClosure {
72 public:
73 virtual bool do_object_b(oop p);
74 };
75
76 class KeepAliveClosure: public OopClosure {
77 protected:
78 template <class T> void do_oop_work(T* p);
79 public:
153 template <class T> static inline void adjust_pointer(T* p);
154
155 // Check mark and maybe push on marking stack
156 template <class T> static void mark_and_push(T* p);
157
158 private:
159 // Call backs for marking
160 static void mark_object(oop obj);
161 // Mark pointer and follow contents. Empty marking stack afterwards.
162 template <class T> static inline void follow_root(T* p);
163
164 static inline void push_objarray(oop obj, size_t index);
165
166 static void follow_object(oop obj);
167
168 static void follow_array(objArrayOop array);
169
170 static void follow_array_chunk(objArrayOop array, int index);
171 };
172
173 class MarkAndPushClosure: public OopIterateClosure {
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 markOop _mark;
203
204 public:
205 void init(oop obj, markOop mark) {
206 _obj = obj;
207 _mark = mark;
208 }
209
210 void adjust_pointer();
|