diff --git a/src/hotspot/share/gc/g1/g1FullGCMarker.cpp b/src/hotspot/share/gc/g1/g1FullGCMarker.cpp index 0e2a075d69d..71e0d70b232 100644 --- a/src/hotspot/share/gc/g1/g1FullGCMarker.cpp +++ b/src/hotspot/share/gc/g1/g1FullGCMarker.cpp @@ -41,7 +41,7 @@ G1FullGCMarker::G1FullGCMarker(G1FullCollector* collector, _oop_stack(), _objarray_stack(), _preserved_stack(preserved_stack), - _mark_closure(worker_id, this, G1CollectedHeap::heap()->ref_processor_stw()), + _mark_closure(worker_id, this, ClassLoaderData::_claim_stw_fullgc_mark, G1CollectedHeap::heap()->ref_processor_stw()), _verify_closure(VerifyOption::G1UseFullMarking), _stack_closure(this), _cld_closure(mark_closure(), ClassLoaderData::_claim_stw_fullgc_mark), diff --git a/src/hotspot/share/gc/g1/g1FullGCMarker.hpp b/src/hotspot/share/gc/g1/g1FullGCMarker.hpp index ee77e5044fc..60ece336f80 100644 --- a/src/hotspot/share/gc/g1/g1FullGCMarker.hpp +++ b/src/hotspot/share/gc/g1/g1FullGCMarker.hpp @@ -100,8 +100,6 @@ public: // Marking entry points template inline void mark_and_push(T* p); - inline void follow_klass(Klass* k); - inline void follow_cld(ClassLoaderData* cld); inline void follow_marking_stacks(); void complete_marking(OopQueueSet* oop_stacks, diff --git a/src/hotspot/share/gc/g1/g1FullGCMarker.inline.hpp b/src/hotspot/share/gc/g1/g1FullGCMarker.inline.hpp index cfa0ef9e9d1..3e6d1ad4232 100644 --- a/src/hotspot/share/gc/g1/g1FullGCMarker.inline.hpp +++ b/src/hotspot/share/gc/g1/g1FullGCMarker.inline.hpp @@ -101,7 +101,7 @@ inline void G1FullGCMarker::push_objarray(oop obj, size_t index) { } inline void G1FullGCMarker::follow_array(objArrayOop array) { - follow_klass(array->klass()); + mark_closure()->do_klass(array->klass()); // Don't push empty arrays to avoid unnecessary work. if (array->length() > 0) { push_objarray(array, 0); @@ -193,13 +193,4 @@ void G1FullGCMarker::follow_marking_stacks() { } while (!is_empty()); } -inline void G1FullGCMarker::follow_klass(Klass* k) { - oop op = k->class_loader_data()->holder_no_keepalive(); - mark_and_push(&op); -} - -inline void G1FullGCMarker::follow_cld(ClassLoaderData* cld) { - _cld_closure.do_cld(cld); -} - #endif // SHARE_GC_G1_G1FULLGCMARKER_INLINE_HPP diff --git a/src/hotspot/share/gc/g1/g1FullGCOopClosures.hpp b/src/hotspot/share/gc/g1/g1FullGCOopClosures.hpp index d3af21e4db0..77bbc44a075 100644 --- a/src/hotspot/share/gc/g1/g1FullGCOopClosures.hpp +++ b/src/hotspot/share/gc/g1/g1FullGCOopClosures.hpp @@ -58,25 +58,19 @@ public: virtual void do_oop(narrowOop* p); }; -class G1MarkAndPushClosure : public OopIterateClosure { +class G1MarkAndPushClosure : public ClaimMetadataVisitingOopIterateClosure { G1FullGCMarker* _marker; uint _worker_id; public: - G1MarkAndPushClosure(uint worker, G1FullGCMarker* marker, ReferenceDiscoverer* ref) : - OopIterateClosure(ref), + G1MarkAndPushClosure(uint worker_id, G1FullGCMarker* marker, int claim, ReferenceDiscoverer* ref) : + ClaimMetadataVisitingOopIterateClosure(claim, ref), _marker(marker), - _worker_id(worker) { } + _worker_id(worker_id) { } template inline void do_oop_work(T* p); virtual void do_oop(oop* p); virtual void do_oop(narrowOop* p); - - virtual bool do_metadata(); - virtual void do_klass(Klass* k); - virtual void do_cld(ClassLoaderData* cld); - virtual void do_method(Method* m); - virtual void do_nmethod(nmethod* nm); }; class G1AdjustClosure : public BasicOopIterateClosure { diff --git a/src/hotspot/share/gc/g1/g1FullGCOopClosures.inline.hpp b/src/hotspot/share/gc/g1/g1FullGCOopClosures.inline.hpp index 738145afcab..73e5fee3dd8 100644 --- a/src/hotspot/share/gc/g1/g1FullGCOopClosures.inline.hpp +++ b/src/hotspot/share/gc/g1/g1FullGCOopClosures.inline.hpp @@ -51,26 +51,6 @@ inline void G1MarkAndPushClosure::do_oop(narrowOop* p) { do_oop_work(p); } -inline bool G1MarkAndPushClosure::do_metadata() { - return true; -} - -inline void G1MarkAndPushClosure::do_klass(Klass* k) { - _marker->follow_klass(k); -} - -inline void G1MarkAndPushClosure::do_cld(ClassLoaderData* cld) { - _marker->follow_cld(cld); -} - -inline void G1MarkAndPushClosure::do_method(Method* m) { - m->record_gc_epoch(); -} - -inline void G1MarkAndPushClosure::do_nmethod(nmethod* nm) { - nm->follow_nmethod(this); -} - template inline void G1AdjustClosure::adjust_pointer(T* p) { T heap_oop = RawAccess<>::oop_load(p); if (CompressedOops::is_null(heap_oop)) {