< prev index next >
src/hotspot/share/gc/shenandoah/shenandoahRootProcessor.inline.hpp
Print this page
rev 55336 : 8225550: Shenandoah: Prevent SH::object_iterate() call's side-effects
rev 55338 : 8225590: Shenandoah: Refactor ShenandoahClassLoaderDataRoots API
*** 98,108 ****
ShenandoahParallelOopsDoThreadClosure tc_cl(oops, code, tc);
ResourceMark rm;
_serial_roots.oops_do(oops, worker_id);
_jni_roots.oops_do(oops, worker_id);
! _cld_roots.clds_do(clds, clds, worker_id);
_thread_roots.threads_do(&tc_cl, worker_id);
// With ShenandoahConcurrentScanCodeRoots, we avoid scanning the entire code cache here,
// and instead do that in concurrent phase under the relevant lock. This saves init mark
// pause time.
--- 98,114 ----
ShenandoahParallelOopsDoThreadClosure tc_cl(oops, code, tc);
ResourceMark rm;
_serial_roots.oops_do(oops, worker_id);
_jni_roots.oops_do(oops, worker_id);
!
! if (clds != NULL) {
! _cld_roots.cld_do(clds, worker_id);
! } else {
! assert(ShenandoahHeap::heap()->is_concurrent_traversal_in_progress(), "Only possible with traversal GC");
! }
!
_thread_roots.threads_do(&tc_cl, worker_id);
// With ShenandoahConcurrentScanCodeRoots, we avoid scanning the entire code cache here,
// and instead do that in concurrent phase under the relevant lock. This saves init mark
// pause time.
*** 118,128 ****
ShenandoahParallelOopsDoThreadClosure tc_cl(oops, &code, NULL);
ResourceMark rm;
_serial_roots.oops_do(oops, 0);
_jni_roots.oops_do(oops, 0);
! _cld_roots.clds_do(&clds, &clds, 0);
_thread_roots.threads_do(&tc_cl, 0);
_code_roots.code_blobs_do(&code, 0);
}
template <typename ITR>
--- 124,134 ----
ShenandoahParallelOopsDoThreadClosure tc_cl(oops, &code, NULL);
ResourceMark rm;
_serial_roots.oops_do(oops, 0);
_jni_roots.oops_do(oops, 0);
! _cld_roots.cld_do(&clds, 0);
_thread_roots.threads_do(&tc_cl, 0);
_code_roots.code_blobs_do(&code, 0);
}
template <typename ITR>
*** 132,142 ****
ShenandoahParallelOopsDoThreadClosure tc_cl(oops, &code, NULL);
ResourceMark rm;
_serial_roots.oops_do(oops, 0);
_jni_roots.oops_do(oops, 0);
! _cld_roots.clds_do(&clds, NULL, 0);
_thread_roots.threads_do(&tc_cl, 0);
}
template <typename ITR>
void ShenandoahRootScanner<ITR>::strong_roots_do(uint worker_id, OopClosure* oops, CLDClosure* clds, CodeBlobClosure* code, ThreadClosure* tc) {
--- 138,148 ----
ShenandoahParallelOopsDoThreadClosure tc_cl(oops, &code, NULL);
ResourceMark rm;
_serial_roots.oops_do(oops, 0);
_jni_roots.oops_do(oops, 0);
! _cld_roots.always_strong_cld_do(&clds, 0);
_thread_roots.threads_do(&tc_cl, 0);
}
template <typename ITR>
void ShenandoahRootScanner<ITR>::strong_roots_do(uint worker_id, OopClosure* oops, CLDClosure* clds, CodeBlobClosure* code, ThreadClosure* tc) {
*** 144,168 ****
ShenandoahParallelOopsDoThreadClosure tc_cl(oops, code, tc);
ResourceMark rm;
_serial_roots.oops_do(oops, worker_id);
_jni_roots.oops_do(oops, worker_id);
! _cld_roots.clds_do(clds, NULL, worker_id);
_thread_roots.threads_do(&tc_cl, worker_id);
}
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);
_jni_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);
}
--- 150,173 ----
ShenandoahParallelOopsDoThreadClosure tc_cl(oops, code, tc);
ResourceMark rm;
_serial_roots.oops_do(oops, worker_id);
_jni_roots.oops_do(oops, worker_id);
! _cld_roots.always_strong_cld_do(clds, worker_id);
_thread_roots.threads_do(&tc_cl, worker_id);
}
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);
_jni_roots.oops_do(keep_alive, worker_id);
_thread_roots.oops_do(keep_alive, NULL, worker_id);
! _cld_roots.cld_do(&clds, worker_id);
if(_update_code_cache) {
_code_roots.code_blobs_do(&update_blobs, worker_id);
}
< prev index next >