< prev index next >

src/hotspot/share/gc/shenandoah/shenandoahRootProcessor.inline.hpp

Print this page
rev 59533 : 8246097: Shenandoah: limit parallelism in CLDG root handling
Reviewed-by: XXX

*** 120,130 **** _jni_handle_roots.oops_do(cl, worker_id); _vm_global_roots.oops_do(cl, worker_id); } template <bool CONCURRENT, bool SINGLE_THREADED> ! ShenandoahClassLoaderDataRoots<CONCURRENT, SINGLE_THREADED>::ShenandoahClassLoaderDataRoots(ShenandoahPhaseTimings::Phase phase) : _phase(phase) { if (!SINGLE_THREADED) { ClassLoaderDataGraph::clear_claimed_marks(); } if (CONCURRENT) { --- 120,131 ---- _jni_handle_roots.oops_do(cl, worker_id); _vm_global_roots.oops_do(cl, worker_id); } template <bool CONCURRENT, bool SINGLE_THREADED> ! ShenandoahClassLoaderDataRoots<CONCURRENT, SINGLE_THREADED>::ShenandoahClassLoaderDataRoots(ShenandoahPhaseTimings::Phase phase, uint n_workers) : ! _semaphore(worker_count(n_workers)), _phase(phase) { if (!SINGLE_THREADED) { ClassLoaderDataGraph::clear_claimed_marks(); } if (CONCURRENT) {
*** 144,168 **** void ShenandoahClassLoaderDataRoots<CONCURRENT, SINGLE_THREADED>::always_strong_cld_do(CLDClosure* clds, uint worker_id) { if (SINGLE_THREADED) { assert(SafepointSynchronize::is_at_safepoint(), "Must be at a safepoint"); assert(Thread::current()->is_VM_thread(), "Single threaded CLDG iteration can only be done by VM thread"); ClassLoaderDataGraph::always_strong_cld_do(clds); ! } else { ShenandoahWorkerTimingsTracker timer(_phase, ShenandoahPhaseTimings::CLDGRoots, worker_id); ClassLoaderDataGraph::always_strong_cld_do(clds); } } template <bool CONCURRENT, bool SINGLE_THREADED> void ShenandoahClassLoaderDataRoots<CONCURRENT, SINGLE_THREADED>::cld_do(CLDClosure* clds, uint worker_id) { if (SINGLE_THREADED) { assert(SafepointSynchronize::is_at_safepoint(), "Must be at a safepoint"); assert(Thread::current()->is_VM_thread(), "Single threaded CLDG iteration can only be done by VM thread"); ClassLoaderDataGraph::cld_do(clds); ! } else { ShenandoahWorkerTimingsTracker timer(_phase, ShenandoahPhaseTimings::CLDGRoots, worker_id); ClassLoaderDataGraph::cld_do(clds); } } class ShenandoahParallelOopsDoThreadClosure : public ThreadClosure { private: --- 145,171 ---- void ShenandoahClassLoaderDataRoots<CONCURRENT, SINGLE_THREADED>::always_strong_cld_do(CLDClosure* clds, uint worker_id) { if (SINGLE_THREADED) { assert(SafepointSynchronize::is_at_safepoint(), "Must be at a safepoint"); assert(Thread::current()->is_VM_thread(), "Single threaded CLDG iteration can only be done by VM thread"); ClassLoaderDataGraph::always_strong_cld_do(clds); ! } else if (_semaphore.try_acquire()) { ShenandoahWorkerTimingsTracker timer(_phase, ShenandoahPhaseTimings::CLDGRoots, worker_id); ClassLoaderDataGraph::always_strong_cld_do(clds); + _semaphore.claim_all(); } } template <bool CONCURRENT, bool SINGLE_THREADED> void ShenandoahClassLoaderDataRoots<CONCURRENT, SINGLE_THREADED>::cld_do(CLDClosure* clds, uint worker_id) { if (SINGLE_THREADED) { assert(SafepointSynchronize::is_at_safepoint(), "Must be at a safepoint"); assert(Thread::current()->is_VM_thread(), "Single threaded CLDG iteration can only be done by VM thread"); ClassLoaderDataGraph::cld_do(clds); ! } else if (_semaphore.try_acquire()) { ShenandoahWorkerTimingsTracker timer(_phase, ShenandoahPhaseTimings::CLDGRoots, worker_id); ClassLoaderDataGraph::cld_do(clds); + _semaphore.claim_all(); } } class ShenandoahParallelOopsDoThreadClosure : public ThreadClosure { private:
< prev index next >