179 private: 180 ParCompactionManager* _compaction_manager; 181 public: 182 MarkAndPushClosure(ParCompactionManager* cm) : _compaction_manager(cm) { } 183 184 template <typename T> void do_oop_nv(T* p); 185 virtual void do_oop(oop* p); 186 virtual void do_oop(narrowOop* p); 187 188 // This closure provides its own oop verification code. 189 debug_only(virtual bool should_verify_oops() { return false; }) 190 }; 191 192 class FollowStackClosure: public VoidClosure { 193 private: 194 ParCompactionManager* _compaction_manager; 195 public: 196 FollowStackClosure(ParCompactionManager* cm) : _compaction_manager(cm) { } 197 virtual void do_void(); 198 }; 199 200 // The one and only place to start following the classes. 201 // Should only be applied to the ClassLoaderData klasses list. 202 class FollowKlassClosure : public KlassClosure { 203 private: 204 MarkAndPushClosure* _mark_and_push_closure; 205 public: 206 FollowKlassClosure(MarkAndPushClosure* mark_and_push_closure) : 207 _mark_and_push_closure(mark_and_push_closure) { } 208 void do_klass(Klass* klass); 209 }; 210 }; 211 212 inline ParCompactionManager* ParCompactionManager::manager_array(uint index) { 213 assert(_manager_array != NULL, "access of NULL manager_array"); 214 assert(index <= ParallelGCThreads, "out of range manager_array access"); 215 return _manager_array[index]; 216 } 217 218 bool ParCompactionManager::marking_stacks_empty() const { 219 return _marking_stack.is_empty() && _objarray_stack.is_empty(); 220 } 221 222 #endif // SHARE_VM_GC_PARALLEL_PSCOMPACTIONMANAGER_HPP | 179 private: 180 ParCompactionManager* _compaction_manager; 181 public: 182 MarkAndPushClosure(ParCompactionManager* cm) : _compaction_manager(cm) { } 183 184 template <typename T> void do_oop_nv(T* p); 185 virtual void do_oop(oop* p); 186 virtual void do_oop(narrowOop* p); 187 188 // This closure provides its own oop verification code. 189 debug_only(virtual bool should_verify_oops() { return false; }) 190 }; 191 192 class FollowStackClosure: public VoidClosure { 193 private: 194 ParCompactionManager* _compaction_manager; 195 public: 196 FollowStackClosure(ParCompactionManager* cm) : _compaction_manager(cm) { } 197 virtual void do_void(); 198 }; 199 }; 200 201 inline ParCompactionManager* ParCompactionManager::manager_array(uint index) { 202 assert(_manager_array != NULL, "access of NULL manager_array"); 203 assert(index <= ParallelGCThreads, "out of range manager_array access"); 204 return _manager_array[index]; 205 } 206 207 bool ParCompactionManager::marking_stacks_empty() const { 208 return _marking_stack.is_empty() && _objarray_stack.is_empty(); 209 } 210 211 #endif // SHARE_VM_GC_PARALLEL_PSCOMPACTIONMANAGER_HPP |