--- old/src/share/vm/gc/g1/g1RootClosures.cpp 2015-10-13 14:01:36.159844973 +0200 +++ new/src/share/vm/gc/g1/g1RootClosures.cpp 2015-10-13 14:01:36.031839679 +0200 @@ -54,12 +54,14 @@ class G1EvacuationClosures : public G1EvacuationRootClosures { G1SharedClosures _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) {} + _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; } @@ -78,6 +80,8 @@ 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. @@ -87,6 +91,7 @@ class G1InitalMarkClosures : public G1EvacuationRootClosures { G1SharedClosures _strong; G1SharedClosures _weak; + G1ParPushHeapRSClosure _inter_region_oops; // Filter method to help with returning the appropriate closures // depending on the class template parameter. @@ -102,7 +107,8 @@ 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) {} + _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; } @@ -134,6 +140,8 @@ // 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) {