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