RFR: 8069016: Add BarrierSet downcast support

Jon Masamitsu jon.masamitsu at oracle.com
Wed Feb 18 20:01:52 UTC 2015

On 2/16/2015 3:16 PM, Kim Barrett wrote:
> Please review this change that ensures all barrier set downcasts are
> checked when running in debug mode. This is a step toward some
> cleanups and changes to the barrier set class hierarchy, improving
> error checking and making it easier to find places where assumptions
> are being made that would be invalidated by changes.
> I will need a sponsor for this change.
> CR:
> https://bugs.openjdk.java.net/browse/JDK-8069016
> Webrev:
> http://cr.openjdk.java.net/~kbarrett/8069016/webrev.00
> Changeset includes
> * New FakeRttiSupport utility class template.  This provides some


Just starting on this but an up front question.  Do you have a
particular preference for having "Fake" in the class name?  As
opposed to just RTTISupport?  It feels a little funny and adds
(unnecessary?) length to the name.


>    infrastructure for performing the checks. It is intended to
>    ease similar changes in some other class hierarchies where ad hoc
>    checking or unchecked downcasts are common, such as the
>    CollectedHeap hierarchy.
> * Re-implementation of BarrierSet's "fake RTTI" to use
>    FakeRttiSupport.  As part of this, BarrierSet::is_a() is now just an
>    integer bit test rather than a virtual function that needs to walk
>    up the class hierarchy.
> * Adds barrier_set_cast function template, which uses the improved
>    is_a() test to assert the validity of the conversion.
> * Adds BarrierSet::CardTableForRS barrier set name tag, so that all
>    existing classes have an associated tag.
> * Changes all C-style barrier set downcasts to use barrier_set_cast.  In
>    most cases, this is just a mechanical translation.  In some cases some
>    existing checks have been eliminated in favor of the check made by the
>    new mechanism.  In a few places more extensive changes have been made,
>    as detailed below:
> ** In various g1_write_barrier_post() implementations, downcast to
>     G1SATBCardTableLoggingModRefBS rather than G1SATBCardTableModRefBS,
>     since the code being generated includes logging.
> ** In PSMarkSweep::invoke_no_policy(), don't bother conditionalizing
>     clear/invalidate of barrier set on whether the bs is a modrefbs; it
>     always will be for parallel scavenge collector.  Similarly in
>     PSParallelCompact::post_compact().
> ** For VerifyLiveClosure constructor initialization of _bs member, just
>     use barrier_set_cast of the heap's barrier. If the previous is_a
>     conditionalization failed it would just lead to a later segfault
>     when attempting to dereference through the NULL _bs member.
> Testing:
> JPRT, local JTREG of test/[closed]/{gc,runtime},
> local RefWorkload using CMS, G1, ParallelOld

More information about the hotspot-gc-dev mailing list