[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