RFR: 8067499: G1SATBCardTableModRefBS should not inherit from CardTableModRefBSForCTRS

Bengt Rutisson bengt.rutisson at oracle.com
Wed Dec 17 12:53:43 UTC 2014


Hi Kim,

On 2014-12-17 07:14, Kim Barrett wrote:
> Please review this change to G1SATBCardTableModRefBS to derive from
> CardTableModRefBS rather than CardTableModRefBSForCTRS.
>
> Note: I will need a sponsor for this change.
>
> That inheritance change runs afoul of SharedHeap providing remembered set
> support.  That seems inappropriate, since the provided remembered set support
> is oriented toward generational collection (with incremental update barriers),
> but generations show up in GenCollectedHeap, which is derived from SharedHeap.
>
> To address that, the rem_set() member (and associated data member) were moved
> from SharedHeap down to GenCollectedHeap.  This permitted some cleanup in the
> G1 code, eliminating references to the otherwise vestigal global remembered
> set object.  (G1 remembered sets are a different sort of creature.)
>
> A different way of addressing the remembered set location would have been to
> change G1CollectedHeap to derive from CollectedHeap rather than SharedHeap,
> and that's a change that has been suggested as a technical debt cleanup.  That
> change would have required similar changes to G1 code, plus a number of other
> changes.  This move of remembered set support can be viewed as a step toward
> changing the heap hierarchy.
>
> It may be that the G1 barrier set shouldn't derive from CardTableModRefBS
> either; CardTableModRefBS provides a lot of stuff that G1 doesn't use or need,
> some of which has to be overridden or called for compatibility.
> Alternatively, it might be that some things presently in CardTableModRefBS
> should be moved down to CardTableModRefBSForCTRS.  But again, that larger
> refactoring would require more changes, and this move of remembered set
> support and shift of the G1 barrier set base class can be viewed as a step
> toward that larger refactoring.
>
> CR:
> https://bugs.openjdk.java.net/browse/JDK-8067499
>
> Webrev:
> http://cr.openjdk.java.net/~kbarrett/8067499/webrev

Great cleanup!

One thought about this code in cardTableRS.cpp:

   41 #if INCLUDE_ALL_GCS
   42   guarantee(!UseG1GC, "sanity");
   43 #endif

I don't think we need the INCLUDE_ALL_GCS guard here since the UseG1GC 
is always available. Also, I think I would prefer to check for what we 
actually expect instead of what we don't expect. This is what we are 
expecting, right?

guarantee(UseSerialGC | UseConcMarkSweepGC, "santiy");

Thanks,
Bengt

>
> Testing:
> Local jtreg of hotspot/test/{runtime,gc}.
> JPRT
> refworkload with G1, CMS, and ParOld collectors.
>



More information about the hotspot-gc-dev mailing list