< prev index next >

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

Print this page
rev 54810 : 8223774: Shenandoah: Refactor ShenandoahRootProcessor and family

*** 23,46 **** #ifndef SHARE_GC_SHENANDOAH_SHENANDOAHROOTPROCESSOR_INLINE_HPP #define SHARE_GC_SHENANDOAH_SHENANDOAHROOTPROCESSOR_INLINE_HPP #include "gc/shenandoah/shenandoahRootProcessor.hpp" ! template <typename IsAlive> ! void ShenandoahRootProcessor::update_all_roots(OopClosure* oops, ! CLDClosure* clds, ! CodeBlobClosure* blobs, ! ThreadClosure* thread_cl, ! uint worker_id) { ! process_all_roots(oops, clds, blobs, thread_cl, worker_id); ! ! IsAlive is_alive; ! _weak_processor_task.work<IsAlive, OopClosure>(worker_id, &is_alive, oops); ! _processed_weak_roots = true; ! if (ShenandoahStringDedup::is_enabled()) { ! ShenandoahStringDedup::parallel_oops_do(&is_alive, oops, worker_id); } } #endif // SHARE_GC_SHENANDOAH_SHENANDOAHROOTPROCESSOR_INLINE_HPP --- 23,72 ---- #ifndef SHARE_GC_SHENANDOAH_SHENANDOAHROOTPROCESSOR_INLINE_HPP #define SHARE_GC_SHENANDOAH_SHENANDOAHROOTPROCESSOR_INLINE_HPP #include "gc/shenandoah/shenandoahRootProcessor.hpp" + #include "gc/shenandoah/shenandoahTimingTracker.hpp" ! template <typename IsAlive, typename KeepAlive> ! void ShenandoahWeakRoots::oops_do(IsAlive* is_alive, KeepAlive* keep_alive, uint worker_id) { ! _task.work<IsAlive, KeepAlive>(worker_id, is_alive, keep_alive); ! } ! ! template <typename ITR> ! ShenandoahCodeCacheRoot<ITR>::ShenandoahCodeCacheRoot() { ! nmethod::oops_do_marking_prologue(); ! } ! ! template <typename ITR> ! void ShenandoahCodeCacheRoot<ITR>::code_blobs_do(CodeBlobClosure* blob_cl, uint worker_id) { ! ShenandoahWorkerTimings* worker_times = ShenandoahHeap::heap()->phase_timings()->worker_times(); ! ShenandoahWorkerTimingsTracker timer(worker_times, ShenandoahPhaseTimings::CodeCacheRoots, worker_id); ! _coderoots_iterator.possibly_parallel_blobs_do(blob_cl); ! } ! ! template <typename ITR> ! ShenandoahCodeCacheRoot<ITR>::~ShenandoahCodeCacheRoot() { ! nmethod::oops_do_marking_epilogue(); ! } ! ! template <typename IsAlive, typename KeepAlive> ! void ShenandoahRootUpdater::roots_do(uint worker_id, IsAlive* is_alive, KeepAlive* keep_alive) { ! CodeBlobToOopClosure update_blobs(keep_alive, CodeBlobToOopClosure::FixRelocations); ! CLDToOopClosure clds(keep_alive, ClassLoaderData::_claim_strong); ! CLDToOopClosure* weak_clds = ShenandoahHeap::heap()->unload_classes() ? NULL : &clds; ! ! _serial_roots.oops_do(keep_alive, worker_id); ! _thread_roots.oops_do(keep_alive, NULL, worker_id); ! _cld_roots.clds_do(&clds, weak_clds, worker_id); ! ! if(_update_code_cache) { ! _code_roots.code_blobs_do(&update_blobs, worker_id); } + + _weak_roots.oops_do<IsAlive, KeepAlive>(is_alive, keep_alive, worker_id); + _dedup_roots.oops_do(is_alive, keep_alive, worker_id); } + #endif // SHARE_GC_SHENANDOAH_SHENANDOAHROOTPROCESSOR_INLINE_HPP
< prev index next >