< prev index next >
src/hotspot/share/gc/shenandoah/shenandoahConcurrentMark.cpp
Print this page
rev 51548 : Avoid indirection to next-mark-context
@@ -52,28 +52,31 @@
template<UpdateRefsMode UPDATE_REFS>
class ShenandoahInitMarkRootsClosure : public OopClosure {
private:
ShenandoahObjToScanQueue* _queue;
ShenandoahHeap* _heap;
+ ShenandoahMarkingContext* const _mark_context;
template <class T>
inline void do_oop_work(T* p) {
- ShenandoahConcurrentMark::mark_through_ref<T, UPDATE_REFS, false /* string dedup */>(p, _heap, _queue);
+ ShenandoahConcurrentMark::mark_through_ref<T, UPDATE_REFS, false /* string dedup */>(p, _heap, _queue, _mark_context);
}
public:
ShenandoahInitMarkRootsClosure(ShenandoahObjToScanQueue* q) :
- _queue(q), _heap(ShenandoahHeap::heap()) {};
+ _queue(q), _heap(ShenandoahHeap::heap()),
+ _mark_context(_heap->next_marking_context()) {};
void do_oop(narrowOop* p) { do_oop_work(p); }
void do_oop(oop* p) { do_oop_work(p); }
};
ShenandoahMarkRefsSuperClosure::ShenandoahMarkRefsSuperClosure(ShenandoahObjToScanQueue* q, ReferenceProcessor* rp) :
MetadataVisitingOopIterateClosure(rp),
_queue(q),
- _heap(ShenandoahHeap::heap())
+ _heap(ShenandoahHeap::heap()),
+ _mark_context(_heap->next_marking_context())
{ }
template<UpdateRefsMode UPDATE_REFS>
class ShenandoahInitMarkRootsTask : public AbstractGangTask {
@@ -543,37 +546,41 @@
class ShenandoahCMKeepAliveClosure : public OopClosure {
private:
ShenandoahObjToScanQueue* _queue;
ShenandoahHeap* _heap;
+ ShenandoahMarkingContext* const _mark_context;
template <class T>
inline void do_oop_work(T* p) {
- ShenandoahConcurrentMark::mark_through_ref<T, NONE, false /* string dedup */>(p, _heap, _queue);
+ ShenandoahConcurrentMark::mark_through_ref<T, NONE, false /* string dedup */>(p, _heap, _queue, _mark_context);
}
public:
ShenandoahCMKeepAliveClosure(ShenandoahObjToScanQueue* q) :
- _queue(q), _heap(ShenandoahHeap::heap()) {}
+ _queue(q), _heap(ShenandoahHeap::heap()),
+ _mark_context(_heap->next_marking_context()) {}
void do_oop(narrowOop* p) { do_oop_work(p); }
void do_oop(oop* p) { do_oop_work(p); }
};
class ShenandoahCMKeepAliveUpdateClosure : public OopClosure {
private:
ShenandoahObjToScanQueue* _queue;
ShenandoahHeap* _heap;
+ ShenandoahMarkingContext* const _mark_context;
template <class T>
inline void do_oop_work(T* p) {
- ShenandoahConcurrentMark::mark_through_ref<T, SIMPLE, false /* string dedup */>(p, _heap, _queue);
+ ShenandoahConcurrentMark::mark_through_ref<T, SIMPLE, false /* string dedup */>(p, _heap, _queue, _mark_context);
}
public:
ShenandoahCMKeepAliveUpdateClosure(ShenandoahObjToScanQueue* q) :
- _queue(q), _heap(ShenandoahHeap::heap()) {}
+ _queue(q), _heap(ShenandoahHeap::heap()),
+ _mark_context(_heap->next_marking_context()) {}
void do_oop(narrowOop* p) { do_oop_work(p); }
void do_oop(oop* p) { do_oop_work(p); }
};
@@ -765,19 +772,21 @@
class ShenandoahPrecleanKeepAliveUpdateClosure : public OopClosure {
private:
ShenandoahObjToScanQueue* _queue;
ShenandoahHeap* _heap;
+ ShenandoahMarkingContext* const _mark_context;
template <class T>
inline void do_oop_work(T* p) {
- ShenandoahConcurrentMark::mark_through_ref<T, CONCURRENT, false /* string dedup */>(p, _heap, _queue);
+ ShenandoahConcurrentMark::mark_through_ref<T, CONCURRENT, false /* string dedup */>(p, _heap, _queue, _mark_context);
}
public:
ShenandoahPrecleanKeepAliveUpdateClosure(ShenandoahObjToScanQueue* q) :
- _queue(q), _heap(ShenandoahHeap::heap()) {}
+ _queue(q), _heap(ShenandoahHeap::heap()),
+ _mark_context(_heap->next_marking_context()) {}
void do_oop(narrowOop* p) { do_oop_work(p); }
void do_oop(oop* p) { do_oop_work(p); }
};
< prev index next >