8298652: G1: Refactor G1MarkAndPushClosure
Reviewed-by: iwalulya, tschatzl
This commit is contained in:
parent
8a10eef408
commit
c252a85fb0
@ -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)) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user