< prev index next >
src/share/vm/gc/g1/g1RootClosures.cpp
Print this page
rev 9081 : imported patch rootclosureset
rev 9083 : imported patch erik-review
rev 9084 : [mq]: stefank-comments
rev 9085 : imported patch stefank-patch2
rev 9086 : imported patch trace-metadata
rev 9087 : imported patch parpush
*** 52,67 ****
_buffered_oops(&_oops) {}
};
class G1EvacuationClosures : public G1EvacuationRootClosures {
G1SharedClosures<G1MarkNone> _closures;
public:
G1EvacuationClosures(G1CollectedHeap* g1h,
G1ParScanThreadState* pss,
bool gcs_are_young) :
! _closures(g1h, pss, gcs_are_young, /* must_claim_cld */ false) {}
OopClosure* weak_oops() { return &_closures._buffered_oops; }
OopClosure* strong_oops() { return &_closures._buffered_oops; }
CLDClosure* weak_clds() { return &_closures._clds; }
--- 52,69 ----
_buffered_oops(&_oops) {}
};
class G1EvacuationClosures : public G1EvacuationRootClosures {
G1SharedClosures<G1MarkNone> _closures;
+ G1ParPushHeapRSClosure _inter_region_oops;
public:
G1EvacuationClosures(G1CollectedHeap* g1h,
G1ParScanThreadState* pss,
bool gcs_are_young) :
! _closures(g1h, pss, gcs_are_young, /* must_claim_cld */ false),
! _inter_region_oops(g1h, pss) {}
OopClosure* weak_oops() { return &_closures._buffered_oops; }
OopClosure* strong_oops() { return &_closures._buffered_oops; }
CLDClosure* weak_clds() { return &_closures._clds; }
*** 76,94 ****
--- 78,99 ----
double closure_app_seconds() { return _closures._buffered_oops.closure_app_seconds(); }
OopClosure* raw_strong_oops() { return &_closures._oops; }
bool trace_metadata() { return false; }
+
+ G1ParPushHeapRSClosure* inter_region_oops() { return &_inter_region_oops; }
};
// Closures used during initial mark.
// The treatment of "weak" roots is selectable through the template parameter,
// this is usually used to control unloading of classes and interned strings.
template <G1Mark MarkWeak>
class G1InitalMarkClosures : public G1EvacuationRootClosures {
G1SharedClosures<G1MarkFromRoot> _strong;
G1SharedClosures<MarkWeak> _weak;
+ G1ParPushHeapRSClosure _inter_region_oops;
// Filter method to help with returning the appropriate closures
// depending on the class template parameter.
template <G1Mark Mark, typename T>
T* null_if(T* t) {
*** 100,110 ****
public:
G1InitalMarkClosures(G1CollectedHeap* g1h,
G1ParScanThreadState* pss) :
_strong(g1h, pss, /* process_only_dirty_klasses */ false, /* must_claim_cld */ true),
! _weak(g1h, pss, /* process_only_dirty_klasses */ false, /* must_claim_cld */ true) {}
OopClosure* weak_oops() { return &_weak._buffered_oops; }
OopClosure* strong_oops() { return &_strong._buffered_oops; }
// If MarkWeak is G1MarkPromotedFromRoot then the weak CLDs must be processed in a second pass.
--- 105,116 ----
public:
G1InitalMarkClosures(G1CollectedHeap* g1h,
G1ParScanThreadState* pss) :
_strong(g1h, pss, /* process_only_dirty_klasses */ false, /* must_claim_cld */ true),
! _weak(g1h, pss, /* process_only_dirty_klasses */ false, /* must_claim_cld */ true),
! _inter_region_oops(g1h, pss) {}
OopClosure* weak_oops() { return &_weak._buffered_oops; }
OopClosure* strong_oops() { return &_strong._buffered_oops; }
// If MarkWeak is G1MarkPromotedFromRoot then the weak CLDs must be processed in a second pass.
*** 132,141 ****
--- 138,149 ----
OopClosure* raw_strong_oops() { return &_strong._oops; }
// If we are not marking all weak roots then we are tracing
// which metadata is alive.
bool trace_metadata() { return MarkWeak == G1MarkPromotedFromRoot; }
+
+ G1ParPushHeapRSClosure* inter_region_oops() { return &_inter_region_oops; }
};
G1EvacuationRootClosures* G1EvacuationRootClosures::create_root_closures(G1ParScanThreadState* pss, G1CollectedHeap* g1h) {
if (g1h->collector_state()->during_initial_mark_pause()) {
if (ClassUnloadingWithConcurrentMark) {
< prev index next >