src/share/vm/gc_implementation/concurrentMarkSweep/cmsOopClosures.hpp
Print this page
*** 323,348 ****
};
// For objects in CMS generation, this closure marks
// given objects (transitively) as being reachable/live.
// This is currently used during the (weak) reference object
! // processing phase of the CMS final checkpoint step.
class CMSKeepAliveClosure: public OopClosure {
private:
CMSCollector* _collector;
const MemRegion _span;
CMSMarkStack* _mark_stack;
CMSBitMap* _bit_map;
protected:
DO_OOP_WORK_DEFN
public:
CMSKeepAliveClosure(CMSCollector* collector, MemRegion span,
! CMSBitMap* bit_map, CMSMarkStack* mark_stack):
_collector(collector),
_span(span),
_bit_map(bit_map),
! _mark_stack(mark_stack) {
assert(!_span.is_empty(), "Empty span could spell trouble");
}
virtual void do_oop(oop* p);
virtual void do_oop(narrowOop* p);
inline void do_oop_nv(oop* p) { CMSKeepAliveClosure::do_oop_work(p); }
--- 323,354 ----
};
// For objects in CMS generation, this closure marks
// given objects (transitively) as being reachable/live.
// This is currently used during the (weak) reference object
! // processing phase of the CMS final checkpoint step, as
! // well as during the concurrent precleaning of the discovered
! // reference lists.
class CMSKeepAliveClosure: public OopClosure {
+ friend class CMSDrainMarkingStackClosure; // for assertion checking
private:
CMSCollector* _collector;
const MemRegion _span;
CMSMarkStack* _mark_stack;
CMSBitMap* _bit_map;
+ bool _concurrent_precleaning;
protected:
DO_OOP_WORK_DEFN
public:
CMSKeepAliveClosure(CMSCollector* collector, MemRegion span,
! CMSBitMap* bit_map, CMSMarkStack* mark_stack,
! bool concurrent_precleaning):
_collector(collector),
_span(span),
_bit_map(bit_map),
! _mark_stack(mark_stack),
! _concurrent_precleaning(concurrent_precleaning) {
assert(!_span.is_empty(), "Empty span could spell trouble");
}
virtual void do_oop(oop* p);
virtual void do_oop(narrowOop* p);
inline void do_oop_nv(oop* p) { CMSKeepAliveClosure::do_oop_work(p); }