< prev index next >

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

Print this page

        

*** 26,35 **** --- 26,37 ---- #include "classfile/classLoaderDataGraph.hpp" #include "classfile/stringTable.hpp" #include "classfile/systemDictionary.hpp" #include "gc/shared/oopStorageParState.inline.hpp" + #include "gc/shenandoah/shenandoahClosures.inline.hpp" + #include "gc/shenandoah/shenandoahConcurrentRoots.hpp" #include "gc/shenandoah/shenandoahHeuristics.hpp" #include "gc/shenandoah/shenandoahRootProcessor.hpp" #include "gc/shenandoah/shenandoahTimingTracker.hpp" #include "gc/shenandoah/shenandoahUtils.hpp" #include "memory/resourceArea.hpp"
*** 263,280 **** } 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); _serial_roots.oops_do(keep_alive, worker_id); _vm_roots.oops_do(keep_alive, worker_id); - _thread_roots.oops_do(keep_alive, NULL, worker_id); _cld_roots.cld_do(&clds, worker_id); _code_roots.code_blobs_do(&update_blobs, worker_id); _serial_weak_roots.weak_oops_do(is_alive, keep_alive, worker_id); _weak_roots.weak_oops_do(is_alive, keep_alive, worker_id); _dedup_roots.oops_do(is_alive, keep_alive, worker_id); } --- 265,287 ---- } 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); + ShenandoahCodeBlobAndDisarmClosure blobs_and_disarm_Cl(keep_alive); + CodeBlobToOopClosure* codes_cl = ShenandoahConcurrentRoots::can_do_concurrent_class_unloading() ? + static_cast<CodeBlobToOopClosure*>(&blobs_and_disarm_Cl) : + static_cast<CodeBlobToOopClosure*>(&update_blobs); + CLDToOopClosure clds(keep_alive, ClassLoaderData::_claim_strong); _serial_roots.oops_do(keep_alive, worker_id); _vm_roots.oops_do(keep_alive, worker_id); _cld_roots.cld_do(&clds, worker_id); _code_roots.code_blobs_do(&update_blobs, worker_id); + _thread_roots.oops_do(keep_alive, NULL, worker_id); _serial_weak_roots.weak_oops_do(is_alive, keep_alive, worker_id); _weak_roots.weak_oops_do(is_alive, keep_alive, worker_id); _dedup_roots.oops_do(is_alive, keep_alive, worker_id); }
< prev index next >