RFR: 8276229: Stop allowing implicit updates in G1BlockOffsetTable
Thomas Schatzl
tschatzl at openjdk.java.net
Wed Nov 10 13:48:33 UTC 2021
On Wed, 10 Nov 2021 13:22:25 GMT, Stefan Johansson <sjohanss at openjdk.org> wrote:
>> You're missing the case where `addr` is not covered by the first object ("block") in the card. So when asking for `block_at_or_preciding(addr)` we get an object that is stretching into the card same card as `addr` map to, but it is not certain that it is the object containing `addr`.
>
> My initial thought was also that this should not be needed, but the code proved me wrong. It might be possible to refactor the code even further to avoid this case.
Okay, understood. I have been too fixated on the case with remembered sets to disregard other cases, looking at the code I even found interesting ones :)
card1 card2
-----+----------+----------+---------
A|AAABBBCCCD|DDD |
-----+----------+----------+---------
^ ^ ^
q n addr
```
Something like this: we get asked by `addr` somewhere in card card1, `block_preceeding_addr(addr)` is `q` and `n` is the end of the block.
Agree, then the code (and the comment) is correct.
Maybe it is really worth to optimize the card scanning case.
-------------
PR: https://git.openjdk.java.net/jdk/pull/6332
More information about the hotspot-gc-dev
mailing list