RFR: 8166811: Missing memory fences between memory allocation and refinement
Thomas Schatzl
thomas.schatzl at oracle.com
Mon Nov 7 10:57:05 UTC 2016
Hi,
On Sat, 2016-10-29 at 19:26 -0400, Kim Barrett wrote:
> >
> > On Oct 25, 2016, at 7:13 PM, Kim Barrett <kim.barrett at oracle.com>
> > wrote:
> >
> > Please review this change to address missing memory barriers needed
> > to
> > ensure ordering between allocation and refinement in G1.
> > […]
> >
> > CR:
> > https://bugs.openjdk.java.net/browse/JDK-8166811
> >
> > Webrev:
> > http://cr.openjdk.java.net/~kbarrett/8166811/webrev.00/
> > [Based on http://cr.openjdk.java.net/~kbarrett/8166607/webrev.02/]
> >
> -------------------------------------------------------------------
> -----------
> src/share/vm/gc/g1/g1RemSet.cpp
> 581 // The region could be young. Cards for young regions are
> dirtied,
> 582 // so the post-barrier will filter them out. However, that
> dirtying
> 583 // is performed concurrently. A write to a young object could
> occur
> 584 // before the card has been dirtied, slipping past the filter.
>
> This is a rewording of the comment that used to be here. However, it
> was not true even before these changes. As part of JDK-8014555 we
> mark young region cards with g1_young_card_val(). That's the change
> set that added the storeload to the post-barrier.
>
> I'm not quite sure what to do about this. The comment is currently
> wrong. However, the storeload is considered a problem, and there
> have been various ideas discussed for eliminating it that might allow
> us to go back to dirtying young cards.
Depends on what "dirtying" is supposed to mean in this context -
setting it to "dirty" or setting it to something non-clean.
One could replace "dirtied" by something less specific here to make it
right again.
Thanks,
Thomas
More information about the hotspot-dev
mailing list