< prev index next >

src/hotspot/share/gc/shenandoah/shenandoahConcurrentMark.cpp

Print this page
rev 53870 : imported patch shade-shenandoah-ptrqueue


 210     }
 211 
 212     _cm->concurrent_scan_code_roots(worker_id, rp);
 213     _cm->mark_loop(worker_id, _terminator, rp,
 214                    true, // cancellable
 215                    ShenandoahStringDedup::is_enabled()); // perform string dedup
 216   }
 217 };
 218 
 219 class ShenandoahSATBThreadsClosure : public ThreadClosure {
 220 private:
 221   ShenandoahSATBBufferClosure* _satb_cl;
 222   int _thread_parity;
 223 
 224 public:
 225   ShenandoahSATBThreadsClosure(ShenandoahSATBBufferClosure* satb_cl) :
 226     _satb_cl(satb_cl),
 227     _thread_parity(Threads::thread_claim_parity()) {}
 228 
 229   void do_thread(Thread* thread) {
 230     if (thread->is_Java_thread()) {
 231       if (thread->claim_oops_do(true, _thread_parity)) {
 232         JavaThread* jt = (JavaThread*)thread;
 233         ShenandoahThreadLocalData::satb_mark_queue(jt).apply_closure_and_empty(_satb_cl);
 234       }
 235     } else if (thread->is_VM_thread()) {
 236       if (thread->claim_oops_do(true, _thread_parity)) {
 237         ShenandoahBarrierSet::satb_mark_queue_set().shared_satb_queue()->apply_closure_and_empty(_satb_cl);
 238       }
 239     }
 240   }
 241 };
 242 
 243 class ShenandoahFinalMarkingTask : public AbstractGangTask {
 244 private:
 245   ShenandoahConcurrentMark* _cm;
 246   ShenandoahTaskTerminator* _terminator;
 247   bool _dedup_string;
 248 
 249 public:
 250   ShenandoahFinalMarkingTask(ShenandoahConcurrentMark* cm, ShenandoahTaskTerminator* terminator, bool dedup_string) :
 251     AbstractGangTask("Shenandoah Final Marking"), _cm(cm), _terminator(terminator), _dedup_string(dedup_string) {
 252   }
 253 
 254   void work(uint worker_id) {
 255     ShenandoahHeap* heap = ShenandoahHeap::heap();
 256 
 257     ShenandoahParallelWorkerSession worker_session(worker_id);
 258     // First drain remaining SATB buffers.




 210     }
 211 
 212     _cm->concurrent_scan_code_roots(worker_id, rp);
 213     _cm->mark_loop(worker_id, _terminator, rp,
 214                    true, // cancellable
 215                    ShenandoahStringDedup::is_enabled()); // perform string dedup
 216   }
 217 };
 218 
 219 class ShenandoahSATBThreadsClosure : public ThreadClosure {
 220 private:
 221   ShenandoahSATBBufferClosure* _satb_cl;
 222   int _thread_parity;
 223 
 224 public:
 225   ShenandoahSATBThreadsClosure(ShenandoahSATBBufferClosure* satb_cl) :
 226     _satb_cl(satb_cl),
 227     _thread_parity(Threads::thread_claim_parity()) {}
 228 
 229   void do_thread(Thread* thread) {

 230     if (thread->claim_oops_do(true, _thread_parity)) {
 231       ShenandoahThreadLocalData::satb_mark_queue(thread).apply_closure_and_empty(_satb_cl);






 232     }
 233   }
 234 };
 235 
 236 class ShenandoahFinalMarkingTask : public AbstractGangTask {
 237 private:
 238   ShenandoahConcurrentMark* _cm;
 239   ShenandoahTaskTerminator* _terminator;
 240   bool _dedup_string;
 241 
 242 public:
 243   ShenandoahFinalMarkingTask(ShenandoahConcurrentMark* cm, ShenandoahTaskTerminator* terminator, bool dedup_string) :
 244     AbstractGangTask("Shenandoah Final Marking"), _cm(cm), _terminator(terminator), _dedup_string(dedup_string) {
 245   }
 246 
 247   void work(uint worker_id) {
 248     ShenandoahHeap* heap = ShenandoahHeap::heap();
 249 
 250     ShenandoahParallelWorkerSession worker_session(worker_id);
 251     // First drain remaining SATB buffers.


< prev index next >