< prev index next >

src/hotspot/share/gc/shared/referenceProcessor.hpp

Print this page
rev 49944 : imported patch 8201492-properly-implement-non-contiguous-reference-processing
rev 49945 : imported patch 8201492-stefanj-review

*** 327,338 **** void balance_queues(DiscoveredList ref_lists[]); // Update (advance) the soft ref master clock field. void update_soft_ref_master_clock(); ! template <class T> ! bool is_subject_to_discovery(T const obj) const; public: // Default parameters give you a vanilla reference processor. ReferenceProcessor(BoolObjectClosure* is_subject_to_discovery, bool mt_processing = false, uint mt_processing_degree = 1, bool mt_discovery = false, uint mt_discovery_degree = 1, --- 327,338 ---- void balance_queues(DiscoveredList ref_lists[]); // Update (advance) the soft ref master clock field. void update_soft_ref_master_clock(); ! bool is_subject_to_discovery(oop const obj) const; ! public: // Default parameters give you a vanilla reference processor. ReferenceProcessor(BoolObjectClosure* is_subject_to_discovery, bool mt_processing = false, uint mt_processing_degree = 1, bool mt_discovery = false, uint mt_discovery_degree = 1,
*** 417,451 **** // debugging void verify_no_references_recorded() PRODUCT_RETURN; void verify_referent(oop obj) PRODUCT_RETURN; }; ! // A reference processor that uses a single memory span to determine the area that // is subject to discovery. Useful for collectors which have contiguous generations. ! class SpanReferenceProcessor : public ReferenceProcessor { ! class SpanBasedDiscoverer : public BoolObjectClosure { ! public: MemRegion _span; ! SpanBasedDiscoverer(MemRegion span) : BoolObjectClosure(), _span(span) { } virtual bool do_object_b(oop obj) { return _span.contains(obj); } - }; - - SpanBasedDiscoverer _span_based_discoverer; - public: - SpanReferenceProcessor(MemRegion span, - bool mt_processing = false, uint mt_processing_degree = 1, - bool mt_discovery = false, uint mt_discovery_degree = 1, - bool atomic_discovery = true, - BoolObjectClosure* is_alive_non_header = NULL); - - // get and set span - MemRegion span() { return _span_based_discoverer._span; } - void set_span(MemRegion span) { _span_based_discoverer._span = span; } }; // A utility class to disable reference discovery in // the scope which contains it, for given ReferenceProcessor. class NoRefDiscovery: StackObj { --- 417,444 ---- // debugging void verify_no_references_recorded() PRODUCT_RETURN; void verify_referent(oop obj) PRODUCT_RETURN; }; ! // A subject-to-discovery closure that uses a single memory span to determine the area that // is subject to discovery. Useful for collectors which have contiguous generations. ! class SpanSubjectToDiscoveryClosure : public BoolObjectClosure { MemRegion _span; ! public: ! SpanSubjectToDiscoveryClosure() : BoolObjectClosure(), _span() { } ! SpanSubjectToDiscoveryClosure(MemRegion span) : BoolObjectClosure(), _span(span) { } ! ! MemRegion span() const { return _span; } ! ! void set_span(MemRegion mr) { ! _span = mr; ! } virtual bool do_object_b(oop obj) { return _span.contains(obj); } }; // A utility class to disable reference discovery in // the scope which contains it, for given ReferenceProcessor. class NoRefDiscovery: StackObj {
*** 468,482 **** }; // A utility class to temporarily mutate the subject discovery closure of the // given ReferenceProcessor in the scope that contains it. class ReferenceProcessorSubjectToDiscoveryMutator : StackObj { - private: ReferenceProcessor* _rp; BoolObjectClosure* _saved_cl; ! public: ReferenceProcessorSubjectToDiscoveryMutator(ReferenceProcessor* rp, BoolObjectClosure* cl): _rp(rp) { _saved_cl = _rp->is_subject_to_discovery_closure(); _rp->set_is_subject_to_discovery_closure(cl); } --- 461,474 ---- }; // A utility class to temporarily mutate the subject discovery closure of the // given ReferenceProcessor in the scope that contains it. class ReferenceProcessorSubjectToDiscoveryMutator : StackObj { ReferenceProcessor* _rp; BoolObjectClosure* _saved_cl; ! public: ReferenceProcessorSubjectToDiscoveryMutator(ReferenceProcessor* rp, BoolObjectClosure* cl): _rp(rp) { _saved_cl = _rp->is_subject_to_discovery_closure(); _rp->set_is_subject_to_discovery_closure(cl); }
*** 486,510 **** } }; // A utility class to temporarily mutate the span of the // given ReferenceProcessor in the scope that contains it. ! class ReferenceProcessorSpanMutator: StackObj { ! private: ! SpanReferenceProcessor* _rp; ! MemRegion _saved_span; ! public: ! ReferenceProcessorSpanMutator(SpanReferenceProcessor* rp, MemRegion span): ! _rp(rp) { ! _saved_span = _rp->span(); ! _rp->set_span(span); } ~ReferenceProcessorSpanMutator() { ! _rp->set_span(_saved_span); } }; // A utility class to temporarily change the MT'ness of // reference discovery for the given ReferenceProcessor --- 478,502 ---- } }; // A utility class to temporarily mutate the span of the // given ReferenceProcessor in the scope that contains it. ! class ReferenceProcessorSpanMutator : StackObj { ! ReferenceProcessor* _rp; ! SpanSubjectToDiscoveryClosure _discoverer; ! BoolObjectClosure* _old_discoverer; ! public: ! ReferenceProcessorSpanMutator(ReferenceProcessor* rp, MemRegion span): ! _rp(rp), _discoverer(span) { ! _old_discoverer = rp->is_subject_to_discovery_closure(); ! rp->set_is_subject_to_discovery_closure(&_discoverer); } ~ReferenceProcessorSpanMutator() { ! _rp->set_is_subject_to_discovery_closure(_old_discoverer); } }; // A utility class to temporarily change the MT'ness of // reference discovery for the given ReferenceProcessor
< prev index next >