248
249 // Deal with a stack overflow condition
250 void handle_stack_overflow(HeapWord* lost);
251 private:
252 inline void do_yield_check();
253 };
254
255 // A parallel (MT) version of the above.
256 // This closure is used during the concurrent marking phase
257 // following the first checkpoint. Its use is buried in
258 // the closure ParMarkFromRootsClosure.
259 class ParPushOrMarkClosure: public MetadataAwareOopClosure {
260 private:
261 CMSCollector* _collector;
262 MemRegion _whole_span;
263 MemRegion _span; // local chunk
264 CMSBitMap* _bit_map;
265 OopTaskQueue* _work_queue;
266 CMSMarkStack* _overflow_stack;
267 HeapWord* const _finger;
268 HeapWord** const _global_finger_addr;
269 ParMarkFromRootsClosure* const
270 _parent;
271 protected:
272 DO_OOP_WORK_DEFN
273 public:
274 ParPushOrMarkClosure(CMSCollector* cms_collector,
275 MemRegion span,
276 CMSBitMap* bit_map,
277 OopTaskQueue* work_queue,
278 CMSMarkStack* mark_stack,
279 HeapWord* finger,
280 HeapWord** global_finger_addr,
281 ParMarkFromRootsClosure* parent);
282 virtual void do_oop(oop* p);
283 virtual void do_oop(narrowOop* p);
284 inline void do_oop_nv(oop* p);
285 inline void do_oop_nv(narrowOop* p);
286
287 // Deal with a stack overflow condition
288 void handle_stack_overflow(HeapWord* lost);
289 private:
290 inline void do_yield_check();
291 };
292
293 // For objects in CMS generation, this closure marks
294 // given objects (transitively) as being reachable/live.
295 // This is currently used during the (weak) reference object
296 // processing phase of the CMS final checkpoint step, as
297 // well as during the concurrent precleaning of the discovered
298 // reference lists.
299 class CMSKeepAliveClosure: public MetadataAwareOopClosure {
300 private:
|
248
249 // Deal with a stack overflow condition
250 void handle_stack_overflow(HeapWord* lost);
251 private:
252 inline void do_yield_check();
253 };
254
255 // A parallel (MT) version of the above.
256 // This closure is used during the concurrent marking phase
257 // following the first checkpoint. Its use is buried in
258 // the closure ParMarkFromRootsClosure.
259 class ParPushOrMarkClosure: public MetadataAwareOopClosure {
260 private:
261 CMSCollector* _collector;
262 MemRegion _whole_span;
263 MemRegion _span; // local chunk
264 CMSBitMap* _bit_map;
265 OopTaskQueue* _work_queue;
266 CMSMarkStack* _overflow_stack;
267 HeapWord* const _finger;
268 HeapWord* volatile* const _global_finger_addr;
269 ParMarkFromRootsClosure* const _parent;
270 protected:
271 DO_OOP_WORK_DEFN
272 public:
273 ParPushOrMarkClosure(CMSCollector* cms_collector,
274 MemRegion span,
275 CMSBitMap* bit_map,
276 OopTaskQueue* work_queue,
277 CMSMarkStack* mark_stack,
278 HeapWord* finger,
279 HeapWord* volatile* global_finger_addr,
280 ParMarkFromRootsClosure* parent);
281 virtual void do_oop(oop* p);
282 virtual void do_oop(narrowOop* p);
283 inline void do_oop_nv(oop* p);
284 inline void do_oop_nv(narrowOop* p);
285
286 // Deal with a stack overflow condition
287 void handle_stack_overflow(HeapWord* lost);
288 private:
289 inline void do_yield_check();
290 };
291
292 // For objects in CMS generation, this closure marks
293 // given objects (transitively) as being reachable/live.
294 // This is currently used during the (weak) reference object
295 // processing phase of the CMS final checkpoint step, as
296 // well as during the concurrent precleaning of the discovered
297 // reference lists.
298 class CMSKeepAliveClosure: public MetadataAwareOopClosure {
299 private:
|