RFR (XS) 8246433: Shenandoah: walk roots in more efficient order in ShenandoahRootUpdater

Zhengyu Gu zgu at redhat.com
Wed Jun 3 12:01:38 UTC 2020


Looks good.

-Zhengyu

On 6/3/20 6:45 AM, Aleksey Shipilev wrote:
> RFE:
>    https://bugs.openjdk.java.net/browse/JDK-8246433
> 
> Missed the spot in ShenandoahRootUpdater while doing JDK-8246100.
> 
> Fix:
> 
> diff -r d0d06b8be678 src/hotspot/share/gc/shenandoah/shenandoahRootProcessor.inline.hpp
> --- a/src/hotspot/share/gc/shenandoah/shenandoahRootProcessor.inline.hpp        Fri May 29 11:58:00
> 2020 +0200
> +++ b/src/hotspot/share/gc/shenandoah/shenandoahRootProcessor.inline.hpp        Wed Jun 03 12:44:47
> 2020 +0200
> @@ -237,18 +237,21 @@
>                                     static_cast<CodeBlobToOopClosure*>(&blobs_and_disarm_Cl) :
>                                     static_cast<CodeBlobToOopClosure*>(&update_blobs);
> 
>     CLDToOopClosure clds(keep_alive, ClassLoaderData::_claim_strong);
> 
> +  // Process serial-claiming roots first
>     _serial_roots.oops_do(keep_alive, worker_id);
> +  _serial_weak_roots.weak_oops_do(is_alive, keep_alive, worker_id);
> +
> +  // Process light-weight/limited parallel roots then
>     _vm_roots.oops_do(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);
> +  _cld_roots.cld_do(&clds, worker_id);
> 
> -  _cld_roots.cld_do(&clds, worker_id);
> +  // Process heavy-weight/fully parallel roots the last
>     _code_roots.code_blobs_do(codes_cl, 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);
>   }
> 
>   #endif // SHARE_GC_SHENANDOAH_SHENANDOAHROOTPROCESSOR_INLINE_HPP
> 
> Testing: hotspot_gc_shenandoah
> 



More information about the shenandoah-dev mailing list