[8u] RFR: Avoid initializing unused SharedHeap::_workers for Shenandoah

Roman Kennke rkennke at redhat.com
Fri Oct 11 16:59:35 UTC 2019


Good.

Thanks,
Roman


> This is 8u-specific fix. The underlying reason for it was resolved since 9 with JDK-8076454.
> 
> Roman noticed during 8u debugging that we have two sets of GC workers. One comes from
> SharedHeap::_workers, and another comes from ShenandoahHeap::_workers. We do that to implement our
> own ShenandoahWorkGang. Unfortunately, that means SharedHeap::_workers gets initialized, takes
> memory and is not used. Moreover, the codepaths that take SharedHeap::workers() would use the wrong
> set of workers! Oops.
> 
> The way out is to stop initializing SharedHeap::_workers in shared code, and do that during
> Shenandoah initialization:
>    https://cr.openjdk.java.net/~shade/shenandoah/8u-double-workers/webrev.01/
> 
> The improvement is clearly visible with NMT:
> 
> NMT (before):
> 
>   Thread (reserved=49387KB, committed=49387KB)
>          (thread #49)
>          (stack: reserved=49176KB, committed=49176KB)
>          (malloc=155KB #268)
>          (arena=56KB #84)
> 
> NMT (after):
> 
>   Thread (reserved=36021KB, committed=36021KB)
>          (thread #36)
>          (stack: reserved=35864KB, committed=35864KB)
>          (malloc=116KB #190)
>          (arena=41KB #58)
> 
> Testing: hotspot_gc_shenandoah {fastdebug, release}, eyeballing NMT logs
> 



More information about the shenandoah-dev mailing list