src/share/vm/gc_implementation/concurrentMarkSweep/cmsOopClosures.hpp

changeset 887
00b023ae2d78
parent 578
b5489bb705c9
child 1370
05f89f00a864
child 1424
148e5441d916
equal deleted inserted replaced
878:b5e603f2e024 887:00b023ae2d78
323 }; 323 };
324 324
325 // For objects in CMS generation, this closure marks 325 // For objects in CMS generation, this closure marks
326 // given objects (transitively) as being reachable/live. 326 // given objects (transitively) as being reachable/live.
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, as
329 // well as during the concurrent precleaning of the discovered
330 // reference lists.
329 class CMSKeepAliveClosure: public OopClosure { 331 class CMSKeepAliveClosure: public OopClosure {
330 private: 332 private:
331 CMSCollector* _collector; 333 CMSCollector* _collector;
332 const MemRegion _span; 334 const MemRegion _span;
333 CMSMarkStack* _mark_stack; 335 CMSMarkStack* _mark_stack;
334 CMSBitMap* _bit_map; 336 CMSBitMap* _bit_map;
337 bool _concurrent_precleaning;
335 protected: 338 protected:
336 DO_OOP_WORK_DEFN 339 DO_OOP_WORK_DEFN
337 public: 340 public:
338 CMSKeepAliveClosure(CMSCollector* collector, MemRegion span, 341 CMSKeepAliveClosure(CMSCollector* collector, MemRegion span,
339 CMSBitMap* bit_map, CMSMarkStack* mark_stack): 342 CMSBitMap* bit_map, CMSMarkStack* mark_stack,
343 bool cpc):
340 _collector(collector), 344 _collector(collector),
341 _span(span), 345 _span(span),
342 _bit_map(bit_map), 346 _bit_map(bit_map),
343 _mark_stack(mark_stack) { 347 _mark_stack(mark_stack),
348 _concurrent_precleaning(cpc) {
344 assert(!_span.is_empty(), "Empty span could spell trouble"); 349 assert(!_span.is_empty(), "Empty span could spell trouble");
345 } 350 }
351 bool concurrent_precleaning() const { return _concurrent_precleaning; }
346 virtual void do_oop(oop* p); 352 virtual void do_oop(oop* p);
347 virtual void do_oop(narrowOop* p); 353 virtual void do_oop(narrowOop* p);
348 inline void do_oop_nv(oop* p) { CMSKeepAliveClosure::do_oop_work(p); } 354 inline void do_oop_nv(oop* p) { CMSKeepAliveClosure::do_oop_work(p); }
349 inline void do_oop_nv(narrowOop* p) { CMSKeepAliveClosure::do_oop_work(p); } 355 inline void do_oop_nv(narrowOop* p) { CMSKeepAliveClosure::do_oop_work(p); }
350 }; 356 };

mercurial