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