1.1 --- a/src/share/vm/gc_implementation/concurrentMarkSweep/cmsOopClosures.hpp Wed Nov 19 14:20:51 2008 -0800 1.2 +++ b/src/share/vm/gc_implementation/concurrentMarkSweep/cmsOopClosures.hpp Thu Nov 20 12:27:41 2008 -0800 1.3 @@ -325,24 +325,30 @@ 1.4 // For objects in CMS generation, this closure marks 1.5 // given objects (transitively) as being reachable/live. 1.6 // This is currently used during the (weak) reference object 1.7 -// processing phase of the CMS final checkpoint step. 1.8 +// processing phase of the CMS final checkpoint step, as 1.9 +// well as during the concurrent precleaning of the discovered 1.10 +// reference lists. 1.11 class CMSKeepAliveClosure: public OopClosure { 1.12 private: 1.13 CMSCollector* _collector; 1.14 const MemRegion _span; 1.15 CMSMarkStack* _mark_stack; 1.16 CMSBitMap* _bit_map; 1.17 + bool _concurrent_precleaning; 1.18 protected: 1.19 DO_OOP_WORK_DEFN 1.20 public: 1.21 CMSKeepAliveClosure(CMSCollector* collector, MemRegion span, 1.22 - CMSBitMap* bit_map, CMSMarkStack* mark_stack): 1.23 + CMSBitMap* bit_map, CMSMarkStack* mark_stack, 1.24 + bool cpc): 1.25 _collector(collector), 1.26 _span(span), 1.27 _bit_map(bit_map), 1.28 - _mark_stack(mark_stack) { 1.29 + _mark_stack(mark_stack), 1.30 + _concurrent_precleaning(cpc) { 1.31 assert(!_span.is_empty(), "Empty span could spell trouble"); 1.32 } 1.33 + bool concurrent_precleaning() const { return _concurrent_precleaning; } 1.34 virtual void do_oop(oop* p); 1.35 virtual void do_oop(narrowOop* p); 1.36 inline void do_oop_nv(oop* p) { CMSKeepAliveClosure::do_oop_work(p); }