130 static void follow_stack(); // Empty marking stack.
131
132 template <class T> static void adjust_pointer(T* p);
133
134 // Check mark and maybe push on marking stack
135 template <class T> static void mark_and_push(T* p);
136
137 private:
138 // Mark live objects
139 static void phase1_mark(bool clear_all_softrefs);
140
141 // Temporary data structures for traversal and storing/restoring marks
142 static void allocate_stacks();
143 static void deallocate_stacks();
144
145 // Call backs for marking
146 static void mark_object(oop obj);
147 // Mark pointer and follow contents. Empty marking stack afterwards.
148 template <class T> static inline void follow_root(T* p);
149
150 static inline void push_objarray(oop obj, size_t index);
151
152 static void follow_object(oop obj);
153
154 static void follow_array(objArrayOop array);
155
156 static void follow_array_chunk(objArrayOop array, int index);
157 };
158
159 class MarkAndPushClosure: public ClaimMetadataVisitingOopIterateClosure {
160 public:
161 MarkAndPushClosure(int claim) : ClaimMetadataVisitingOopIterateClosure(claim) {}
162
163 template <typename T> void do_oop_work(T* p);
164 virtual void do_oop( oop* p);
165 virtual void do_oop(narrowOop* p);
166
167 void set_ref_discoverer(ReferenceDiscoverer* rd) {
168 set_ref_discoverer_internal(rd);
169 }
170 };
|
130 static void follow_stack(); // Empty marking stack.
131
132 template <class T> static void adjust_pointer(T* p);
133
134 // Check mark and maybe push on marking stack
135 template <class T> static void mark_and_push(T* p);
136
137 private:
138 // Mark live objects
139 static void phase1_mark(bool clear_all_softrefs);
140
141 // Temporary data structures for traversal and storing/restoring marks
142 static void allocate_stacks();
143 static void deallocate_stacks();
144
145 // Call backs for marking
146 static void mark_object(oop obj);
147 // Mark pointer and follow contents. Empty marking stack afterwards.
148 template <class T> static inline void follow_root(T* p);
149
150 static inline void push_objarray(objArrayOop obj, size_t index);
151
152 static void follow_object(oop obj);
153
154 static void follow_array(objArrayOop array);
155
156 static void follow_array_chunk(objArrayOop array, int index);
157 };
158
159 class MarkAndPushClosure: public ClaimMetadataVisitingOopIterateClosure {
160 public:
161 MarkAndPushClosure(int claim) : ClaimMetadataVisitingOopIterateClosure(claim) {}
162
163 template <typename T> void do_oop_work(T* p);
164 virtual void do_oop( oop* p);
165 virtual void do_oop(narrowOop* p);
166
167 void set_ref_discoverer(ReferenceDiscoverer* rd) {
168 set_ref_discoverer_internal(rd);
169 }
170 };
|