RFR (S/M): 8202017: Merge Reference Enqueuing phase with phase 3 of Reference processing

Kim Barrett kim.barrett at oracle.com
Mon Apr 23 23:10:35 UTC 2018


> On Apr 19, 2018, at 3:14 PM, Thomas Schatzl <thomas.schatzl at oracle.com> wrote:
> 
> Hi all,
> 
>  can I have reviews for this change that merges the Reference
> Enqueuing phase of reference processing with the respective phase 3 of
> actual Reference Processing?
> 
> This is enabled by JDK-8202018 where we moved some work that cleared
> card tables from inbetween Reference Processing and Reference Enqueuing
> because we could (and likely always could), so the issue that cards
> dirtied by Reference Processing are not cleared any more.
> 
> This saves one time spinning up and synchronizing worker threads at
> least, if not more due to locality (i.e. completely saving one linked
> list traversal).
> 
> This change affects all collectors using the reference processing
> framework - I assume that Shenandoah, if it is using it, does not need
> a split reference enqueuing phase either. Afaik Z does not use this
> framework... :)
> 
> CR:
> https://bugs.openjdk.java.net/browse/JDK-8202017
> Webrev:
> http://cr.openjdk.java.net/~tschatzl/8202017/webrev/
> Testing:
> hs-tier1-4
> 
> Thanks,
>  Thomas

Looks good.  Just a couple very minor things.

------------------------------------------------------------------------------ 
src/hotspot/share/gc/shared/referenceProcessor.cpp
 607     _refs_lists[i].set_head(NULL);
 608     _refs_lists[i].set_length(0);

 790        refs_lists[i].set_head(NULL);
 791        refs_lists[i].set_length(0);

Maybe move these into process_phase3?

------------------------------------------------------------------------------ 
src/hotspot/share/gc/g1/g1CollectedHeap.hpp
 515   // If during an initial mark pause we install a pending list head which is not otherwise reachable

Perhaps s/install/may install/

------------------------------------------------------------------------------ 
src/hotspot/share/gc/shared/genCollectedHeap.cpp
 518       rp->disable_discovery();

Ick!  This whole little dance around discovery_is_atomic,
enqueueing_is_done, &etc looks like it is related to CMS and the
distinction between CMS and Serial.  See also the TODO-ish block
comment at line 489.

This looks ripe for refactoring as part of the cleanup of CMS-specific
intrusions.  Probably should have a followup RFE for this.

------------------------------------------------------------------------------



More information about the hotspot-gc-dev mailing list