8298652: G1: Refactor G1MarkAndPushClosure

Reviewed-by: iwalulya, tschatzl
This commit is contained in:
Albert Mingkun Yang 2023-01-02 14:01:34 +00:00
parent 8a10eef408
commit c252a85fb0
5 changed files with 6 additions and 43 deletions

@ -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),

@ -100,8 +100,6 @@ public:
// Marking entry points
template <class T> 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,

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

@ -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 <class T> 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 {

@ -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 <class T> inline void G1AdjustClosure::adjust_pointer(T* p) {
T heap_oop = RawAccess<>::oop_load(p);
if (CompressedOops::is_null(heap_oop)) {