RFR: 8201318: Introduce GCThreadLocalData to abstract GC-specific data belonging to a thread

Aleksey Shipilev shade at redhat.com
Wed Apr 11 12:59:06 UTC 2018


On 04/11/2018 02:37 PM, Per Liden wrote:
>>> Also, I've shrunk GCThreadLocalData to 112 bytes, which is what G1 currently needs. ZGC currently
>>> uses 156 bytes (IIRC), but that's a change that should stay the ZGC repo for now.
>>
>> Oh. Haven't expected we need that much. This makes me think if we should implement some sort of
>> STATIC_ASSERT-based overflow checks? Not necessarily in this RFE.
> 
> Actually, it's already there, in Thread::gc_data().

Right on!

>> *) Also mention the choice of <128 bytes? Like this:
>>
>>   // The size of GCTLD is kept under 128 bytes to let compilers encode
>>   // accesses to GCTLD members with short offsets from the Thread.
> 
> Hmm, I don't quite think this captures the crux of this. To optimize for code compactness, you just
> need to make sure that the data referenced by generated barriers is kept within a 127 byte offset.
> For example, in ZGC we only ever reference the first word of the GCTLD in the generated barriers
> (i.e. well below 127). The rest of the data is used when we hit the slow path, and then we're
> executing in the VM and don't care about the offset. So, from this point of view, the GCTLD could
> have any size and it wouldn't matter for code compactness. Same it true for G1 and Shenandoah, i.e.
> their generated barriers would be unaffected by an increase in GCTLD size.

That's right. My point was to make the stronger and simpler statement about all fields in GCTLD: if
you put the field in current GCTLD, the access to it from the generated code would likely to be
optimal. I guess "slow parts" of ZGC's GCTLD is a good counter-example. Nevertheless, I find it
better to capture the salient points about performance in the implementation notes near the code:

   // The current size of GCTLD is kept under 128 bytes to let compilers encode
   // accesses to all GCTLD members with short offsets from the Thread. This is not
   // a hard requirement: we can have fields past 128+ bytes, but low-offset fields would
   // be more efficient to access. Therefore, consider putting more frequently used
   // fields first in GCTLD, in case GCTLD size is extended in future and/or moved
   // within the Thread.

Thanks,
-Aleksey


More information about the hotspot-dev mailing list