< prev index next >

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

Print this page
rev 55399 : 8225590: Shenandoah: Refactor ShenandoahClassLoaderDataRoots API
rev 55401 : 8225582: Shenandoah: Enable concurrent evacuation of JNIHandles and CLDG roots

*** 69,82 **** _management_root.oops_do(cl, worker_id); _system_dictionary_root.oops_do(cl, worker_id); _jvmti_root.oops_do(cl, worker_id); } - ShenandoahJNIHandleRoots::ShenandoahJNIHandleRoots() : - ShenandoahSerialRoot(&JNIHandles::oops_do, ShenandoahPhaseTimings::JNIRoots) { - } - ShenandoahThreadRoots::ShenandoahThreadRoots(bool is_par) : _is_par(is_par) { Threads::change_thread_claim_token(); } void ShenandoahThreadRoots::oops_do(OopClosure* oops_cl, CodeBlobClosure* code_cl, uint worker_id) { --- 69,78 ----
*** 124,149 **** if (ShenandoahStringDedup::is_enabled()) { ShenandoahStringDedup::parallel_oops_do(is_alive, keep_alive, worker_id); } } - ShenandoahClassLoaderDataRoots::ShenandoahClassLoaderDataRoots() { - ClassLoaderDataGraph::clear_claimed_marks(); - } - - void ShenandoahClassLoaderDataRoots::always_strong_cld_do(CLDClosure* clds, uint worker_id) { - ShenandoahWorkerTimings* worker_times = ShenandoahHeap::heap()->phase_timings()->worker_times(); - ShenandoahWorkerTimingsTracker timer(worker_times, ShenandoahPhaseTimings::CLDGRoots, worker_id); - ClassLoaderDataGraph::always_strong_cld_do(clds); - } - - void ShenandoahClassLoaderDataRoots::cld_do(CLDClosure* clds, uint worker_id) { - ShenandoahWorkerTimings* worker_times = ShenandoahHeap::heap()->phase_timings()->worker_times(); - ShenandoahWorkerTimingsTracker timer(worker_times, ShenandoahPhaseTimings::CLDGRoots, worker_id); - ClassLoaderDataGraph::cld_do(clds); - } - ShenandoahRootProcessor::ShenandoahRootProcessor(ShenandoahPhaseTimings::Phase phase) : _heap(ShenandoahHeap::heap()), _phase(phase) { assert(SafepointSynchronize::is_at_safepoint(), "Must at safepoint"); _heap->phase_timings()->record_workers_start(_phase); --- 120,129 ----
*** 152,179 **** ShenandoahRootProcessor::~ShenandoahRootProcessor() { assert(SafepointSynchronize::is_at_safepoint(), "Must at safepoint"); _heap->phase_timings()->record_workers_end(_phase); } ! ShenandoahRootEvacuator::ShenandoahRootEvacuator(uint n_workers, ShenandoahPhaseTimings::Phase phase) : ShenandoahRootProcessor(phase), _thread_roots(n_workers > 1), ! _weak_roots(n_workers) { } void ShenandoahRootEvacuator::roots_do(uint worker_id, OopClosure* oops) { MarkingCodeBlobClosure blobsCl(oops, CodeBlobToOopClosure::FixRelocations); - CLDToOopClosure clds(oops, ClassLoaderData::_claim_strong); - CLDToOopClosure* weak_clds = ShenandoahHeap::heap()->unload_classes() ? NULL : &clds; - AlwaysTrueClosure always_true; _serial_roots.oops_do(oops, worker_id); ! _jni_roots.oops_do(oops, worker_id); _thread_roots.oops_do(oops, NULL, worker_id); - _cld_roots.cld_do(&clds, worker_id); _code_roots.code_blobs_do(&blobsCl, worker_id); _weak_roots.oops_do<AlwaysTrueClosure, OopClosure>(&always_true, oops, worker_id); _dedup_roots.oops_do(&always_true, oops, worker_id); } --- 132,160 ---- ShenandoahRootProcessor::~ShenandoahRootProcessor() { assert(SafepointSynchronize::is_at_safepoint(), "Must at safepoint"); _heap->phase_timings()->record_workers_end(_phase); } ! ShenandoahRootEvacuator::ShenandoahRootEvacuator(uint n_workers, ShenandoahPhaseTimings::Phase phase, bool include_concurrent_roots) : ShenandoahRootProcessor(phase), _thread_roots(n_workers > 1), ! _weak_roots(n_workers), ! _include_concurrent_roots(include_concurrent_roots) { } void ShenandoahRootEvacuator::roots_do(uint worker_id, OopClosure* oops) { MarkingCodeBlobClosure blobsCl(oops, CodeBlobToOopClosure::FixRelocations); AlwaysTrueClosure always_true; _serial_roots.oops_do(oops, worker_id); ! if (_include_concurrent_roots) { ! CLDToOopClosure clds(oops, ClassLoaderData::_claim_strong); ! _jni_roots.oops_do<OopClosure>(oops, worker_id); ! _cld_roots.cld_do(&clds, worker_id); ! } _thread_roots.oops_do(oops, NULL, worker_id); _code_roots.code_blobs_do(&blobsCl, worker_id); _weak_roots.oops_do<AlwaysTrueClosure, OopClosure>(&always_true, oops, worker_id); _dedup_roots.oops_do(&always_true, oops, worker_id); }
< prev index next >