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

Aleksey Shipilev shade at redhat.com
Fri Oct 25 08:39:05 UTC 2019


Almost forgot to push this to sh/jdk8 after CPU work was done. Did so now.

-- 
Thanks,
-Aleksey

On 10/11/19 6:59 PM, Roman Kennke wrote:
> 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