comparison src/share/vm/gc_implementation/concurrentMarkSweep/cmsOopClosures.hpp @ 143:b5489bb705c9

6662086: 6u4+, 7b11+: CMS never clears referents when -XX:+ParallelRefProcEnabled Summary: Construct the relevant CMSIsAliveClosure used by CMS during parallel reference processing with the correct span. It had incorrectly been constructed with an empty span, a regression introduced in 6417901. Reviewed-by: jcoomes
author ysr
date Tue, 06 May 2008 15:37:36 -0700
parents ba764ed4b6f2
children 00b023ae2d78
comparison
equal deleted inserted replaced
142:8bd1e4487c18 143:b5489bb705c9
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 };