[15] RFR (XS) 8247560: Shenandoah: heap iteration holds root locks all the time

Zhengyu Gu zgu at redhat.com
Mon Jun 15 12:09:57 UTC 2020


Yes.

Thanks,

-Zhengyu

On 6/15/20 3:38 AM, Aleksey Shipilev wrote:
> Bug:
>    https://bugs.openjdk.java.net/browse/JDK-8247560
> 
> Newly added compressed hprof test exposes a trouble with Shenandoah heap iteration: "Attempting to
> wait on monitor HProf Compression Backend/11 while holding lock CodeCache_lock/6 -- possible deadlock".
> 
> ShenandoahHeapIterationRootScanner holds the CodeCache_lock for code roots iteration, and it lingers
> for the entirety of heap iteration. The fix is to scope it properly:
> 
> diff -r a39eb5a4f1c1 src/hotspot/share/gc/shenandoah/shenandoahHeap.cpp
> --- a/src/hotspot/share/gc/shenandoah/shenandoahHeap.cpp        Thu Jun 11 18:16:32 2020 +0200
> +++ b/src/hotspot/share/gc/shenandoah/shenandoahHeap.cpp        Mon Jun 15 09:19:21 2020 +0200
> @@ -1298,9 +1298,14 @@
>     Stack<oop,mtGC> oop_stack;
> 
> -  // First, we process GC roots according to current GC cycle. This populates the work stack with
> initial objects.
> -  ShenandoahHeapIterationRootScanner rp;
>     ObjectIterateScanRootClosure oops(&_aux_bit_map, &oop_stack);
> 
> -  rp.roots_do(&oops);
> +  {
> +    // First, we process GC roots according to current GC cycle.
> +    // This populates the work stack with initial objects.
> +    // It is important to relinquish the associated locks before diving
> +    // into heap dumper.
> +    ShenandoahHeapIterationRootScanner rp;
> +    rp.roots_do(&oops);
> +  }
> 
>     // Work through the oop stack to traverse heap.
> 
> Testing: hotspot_gc_shenandoah, affected tests (many times)
> 



More information about the shenandoah-dev mailing list