< prev index next >

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

Print this page
rev 55321 : 8225572: Shenandoah: Move JNIHandles root out of serial roots
rev 55322 : 8225550: Shenandoah: Prevent SH::object_iterate() call's side-effects


 109   if (code != NULL && !ShenandoahConcurrentScanCodeRoots) {
 110     _code_roots.code_blobs_do(code, worker_id);
 111   }
 112 }
 113 
 114 template <typename ITR>
 115 void ShenandoahRootScanner<ITR>::roots_do_unchecked(OopClosure* oops) {
 116   CLDToOopClosure clds(oops, ClassLoaderData::_claim_strong);
 117   MarkingCodeBlobClosure code(oops, !CodeBlobToOopClosure::FixRelocations);
 118   ShenandoahParallelOopsDoThreadClosure tc_cl(oops, &code, NULL);
 119   ResourceMark rm;
 120 
 121   _serial_roots.oops_do(oops, 0);
 122   _jni_roots.oops_do(oops, 0);
 123   _cld_roots.clds_do(&clds, &clds, 0);
 124   _thread_roots.threads_do(&tc_cl, 0);
 125   _code_roots.code_blobs_do(&code, 0);
 126 }
 127 
 128 template <typename ITR>













 129 void ShenandoahRootScanner<ITR>::strong_roots_do(uint worker_id, OopClosure* oops, CLDClosure* clds, CodeBlobClosure* code, ThreadClosure* tc) {
 130   assert(ShenandoahHeap::heap()->unload_classes(), "Should be used during class unloading");
 131   ShenandoahParallelOopsDoThreadClosure tc_cl(oops, code, tc);
 132   ResourceMark rm;
 133 
 134   _serial_roots.oops_do(oops, worker_id);
 135   _jni_roots.oops_do(oops, worker_id);
 136   _cld_roots.clds_do(clds, NULL, worker_id);
 137   _thread_roots.threads_do(&tc_cl, worker_id);
 138 }
 139 
 140 template <typename IsAlive, typename KeepAlive>
 141 void ShenandoahRootUpdater::roots_do(uint worker_id, IsAlive* is_alive, KeepAlive* keep_alive) {
 142   CodeBlobToOopClosure update_blobs(keep_alive, CodeBlobToOopClosure::FixRelocations);
 143   CLDToOopClosure clds(keep_alive, ClassLoaderData::_claim_strong);
 144   CLDToOopClosure* weak_clds = ShenandoahHeap::heap()->unload_classes() ? NULL : &clds;
 145 
 146   _serial_roots.oops_do(keep_alive, worker_id);
 147   _jni_roots.oops_do(keep_alive, worker_id);
 148 


 109   if (code != NULL && !ShenandoahConcurrentScanCodeRoots) {
 110     _code_roots.code_blobs_do(code, worker_id);
 111   }
 112 }
 113 
 114 template <typename ITR>
 115 void ShenandoahRootScanner<ITR>::roots_do_unchecked(OopClosure* oops) {
 116   CLDToOopClosure clds(oops, ClassLoaderData::_claim_strong);
 117   MarkingCodeBlobClosure code(oops, !CodeBlobToOopClosure::FixRelocations);
 118   ShenandoahParallelOopsDoThreadClosure tc_cl(oops, &code, NULL);
 119   ResourceMark rm;
 120 
 121   _serial_roots.oops_do(oops, 0);
 122   _jni_roots.oops_do(oops, 0);
 123   _cld_roots.clds_do(&clds, &clds, 0);
 124   _thread_roots.threads_do(&tc_cl, 0);
 125   _code_roots.code_blobs_do(&code, 0);
 126 }
 127 
 128 template <typename ITR>
 129 void ShenandoahRootScanner<ITR>::strong_roots_do_unchecked(OopClosure* oops) {
 130   CLDToOopClosure clds(oops, ClassLoaderData::_claim_strong);
 131   MarkingCodeBlobClosure code(oops, !CodeBlobToOopClosure::FixRelocations);
 132   ShenandoahParallelOopsDoThreadClosure tc_cl(oops, &code, NULL);
 133   ResourceMark rm;
 134 
 135   _serial_roots.oops_do(oops, 0);
 136   _jni_roots.oops_do(oops, 0);
 137   _cld_roots.clds_do(&clds, NULL, 0);
 138   _thread_roots.threads_do(&tc_cl, 0);
 139 }
 140 
 141 template <typename ITR>
 142 void ShenandoahRootScanner<ITR>::strong_roots_do(uint worker_id, OopClosure* oops, CLDClosure* clds, CodeBlobClosure* code, ThreadClosure* tc) {
 143   assert(ShenandoahHeap::heap()->unload_classes(), "Should be used during class unloading");
 144   ShenandoahParallelOopsDoThreadClosure tc_cl(oops, code, tc);
 145   ResourceMark rm;
 146 
 147   _serial_roots.oops_do(oops, worker_id);
 148   _jni_roots.oops_do(oops, worker_id);
 149   _cld_roots.clds_do(clds, NULL, worker_id);
 150   _thread_roots.threads_do(&tc_cl, worker_id);
 151 }
 152 
 153 template <typename IsAlive, typename KeepAlive>
 154 void ShenandoahRootUpdater::roots_do(uint worker_id, IsAlive* is_alive, KeepAlive* keep_alive) {
 155   CodeBlobToOopClosure update_blobs(keep_alive, CodeBlobToOopClosure::FixRelocations);
 156   CLDToOopClosure clds(keep_alive, ClassLoaderData::_claim_strong);
 157   CLDToOopClosure* weak_clds = ShenandoahHeap::heap()->unload_classes() ? NULL : &clds;
 158 
 159   _serial_roots.oops_do(keep_alive, worker_id);
 160   _jni_roots.oops_do(keep_alive, worker_id);
 161 
< prev index next >