< prev index next >
src/hotspot/share/gc/shenandoah/shenandoahConcurrentMark.hpp
Print this page
rev 50928 : Process remaining SATB buffers in final mark/traverse loop instead of separate phase
rev 50929 : [mq]: satb1.patch
*** 64,98 ****
inline void count_liveness(jushort* live_data, oop obj);
inline void count_liveness_humongous(oop obj);
// Actual mark loop with closures set up
! template <class T, bool CANCELLABLE, bool DRAIN_SATB>
void mark_loop_work(T* cl, jushort* live_data, uint worker_id, ParallelTaskTerminator *t);
! template <bool CANCELLABLE, bool DRAIN_SATB>
void mark_loop_prework(uint worker_id, ParallelTaskTerminator *terminator, ReferenceProcessor *rp,
bool class_unload, bool update_refs, bool strdedup);
public:
// Mark loop entry.
// Translates dynamic arguments to template parameters with progressive currying.
void mark_loop(uint worker_id, ParallelTaskTerminator* terminator, ReferenceProcessor *rp,
! bool cancellable, bool drain_satb,
bool class_unload, bool update_refs, bool strdedup) {
if (cancellable) {
! if (drain_satb) {
! mark_loop_prework<true, true>(worker_id, terminator, rp, class_unload, update_refs, strdedup);
} else {
! mark_loop_prework<true, false>(worker_id, terminator, rp, class_unload, update_refs, strdedup);
! }
! } else {
! if (drain_satb) {
! mark_loop_prework<false, true>(worker_id, terminator, rp, class_unload, update_refs, strdedup);
! } else {
! mark_loop_prework<false, false>(worker_id, terminator, rp, class_unload, update_refs, strdedup);
! }
}
}
// We need to do this later when the heap is already created.
void initialize(uint workers);
--- 64,90 ----
inline void count_liveness(jushort* live_data, oop obj);
inline void count_liveness_humongous(oop obj);
// Actual mark loop with closures set up
! template <class T, bool CANCELLABLE>
void mark_loop_work(T* cl, jushort* live_data, uint worker_id, ParallelTaskTerminator *t);
! template <bool CANCELLABLE>
void mark_loop_prework(uint worker_id, ParallelTaskTerminator *terminator, ReferenceProcessor *rp,
bool class_unload, bool update_refs, bool strdedup);
public:
// Mark loop entry.
// Translates dynamic arguments to template parameters with progressive currying.
void mark_loop(uint worker_id, ParallelTaskTerminator* terminator, ReferenceProcessor *rp,
! bool cancellable,
bool class_unload, bool update_refs, bool strdedup) {
if (cancellable) {
! mark_loop_prework<true>(worker_id, terminator, rp, class_unload, update_refs, strdedup);
} else {
! mark_loop_prework<false>(worker_id, terminator, rp, class_unload, update_refs, strdedup);
}
}
// We need to do this later when the heap is already created.
void initialize(uint workers);
*** 124,134 ****
inline bool try_queue(ShenandoahObjToScanQueue* q, ShenandoahMarkTask &task);
ShenandoahObjToScanQueue* get_queue(uint worker_id);
void clear_queue(ShenandoahObjToScanQueue *q);
- void drain_satb_buffers(uint worker_id, bool remark = false);
ShenandoahObjToScanQueueSet* task_queues() { return _task_queues;}
jushort* get_liveness(uint worker_id);
void cancel();
--- 116,125 ----
< prev index next >