158 159 // Access function for compaction managers 160 static ParCompactionManager* gc_thread_compaction_manager(uint index); 161 162 static bool steal(int queue_num, int* seed, oop& t); 163 static bool steal_objarray(int queue_num, int* seed, ObjArrayTask& t); 164 static bool steal(int queue_num, int* seed, size_t& region); 165 166 // Process tasks remaining on any marking stack 167 void follow_marking_stacks(); 168 inline bool marking_stacks_empty() const; 169 170 // Process tasks remaining on any stack 171 void drain_region_stacks(); 172 173 void follow_contents(oop obj); 174 void follow_contents(objArrayOop array, int index); 175 176 void update_contents(oop obj); 177 178 class MarkAndPushClosure: public ExtendedOopClosure { 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]; | 158 159 // Access function for compaction managers 160 static ParCompactionManager* gc_thread_compaction_manager(uint index); 161 162 static bool steal(int queue_num, int* seed, oop& t); 163 static bool steal_objarray(int queue_num, int* seed, ObjArrayTask& t); 164 static bool steal(int queue_num, int* seed, size_t& region); 165 166 // Process tasks remaining on any marking stack 167 void follow_marking_stacks(); 168 inline bool marking_stacks_empty() const; 169 170 // Process tasks remaining on any stack 171 void drain_region_stacks(); 172 173 void follow_contents(oop obj); 174 void follow_contents(objArrayOop array, int index); 175 176 void update_contents(oop obj); 177 178 class MarkAndPushClosure: public BasicOopIterateClosure { 179 private: 180 ParCompactionManager* _compaction_manager; 181 public: 182 MarkAndPushClosure(ParCompactionManager* cm) : _compaction_manager(cm) { } 183 184 template <typename T> void do_oop_work(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]; |