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