< 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 >