327 // This is currently used during the (weak) reference object |
327 // This is currently used during the (weak) reference object |
328 // processing phase of the CMS final checkpoint step. |
328 // processing phase of the CMS final checkpoint step. |
329 class CMSKeepAliveClosure: public OopClosure { |
329 class CMSKeepAliveClosure: public OopClosure { |
330 private: |
330 private: |
331 CMSCollector* _collector; |
331 CMSCollector* _collector; |
332 MemRegion _span; |
332 const MemRegion _span; |
333 CMSMarkStack* _mark_stack; |
333 CMSMarkStack* _mark_stack; |
334 CMSBitMap* _bit_map; |
334 CMSBitMap* _bit_map; |
335 protected: |
335 protected: |
336 DO_OOP_WORK_DEFN |
336 DO_OOP_WORK_DEFN |
337 public: |
337 public: |
338 CMSKeepAliveClosure(CMSCollector* collector, MemRegion span, |
338 CMSKeepAliveClosure(CMSCollector* collector, MemRegion span, |
339 CMSBitMap* bit_map, CMSMarkStack* mark_stack): |
339 CMSBitMap* bit_map, CMSMarkStack* mark_stack): |
340 _collector(collector), |
340 _collector(collector), |
341 _span(span), |
341 _span(span), |
342 _bit_map(bit_map), |
342 _bit_map(bit_map), |
343 _mark_stack(mark_stack) { } |
343 _mark_stack(mark_stack) { |
|
344 assert(!_span.is_empty(), "Empty span could spell trouble"); |
|
345 } |
344 virtual void do_oop(oop* p); |
346 virtual void do_oop(oop* p); |
345 virtual void do_oop(narrowOop* p); |
347 virtual void do_oop(narrowOop* p); |
346 inline void do_oop_nv(oop* p) { CMSKeepAliveClosure::do_oop_work(p); } |
348 inline void do_oop_nv(oop* p) { CMSKeepAliveClosure::do_oop_work(p); } |
347 inline void do_oop_nv(narrowOop* p) { CMSKeepAliveClosure::do_oop_work(p); } |
349 inline void do_oop_nv(narrowOop* p) { CMSKeepAliveClosure::do_oop_work(p); } |
348 }; |
350 }; |