RFR: 8153745: Avoid spawning G1ParPreserveCMReferentsTask when there is no work to be done

Thomas Schatzl thomas.schatzl at oracle.com
Fri Apr 8 11:45:19 UTC 2016


On Fri, 2016-04-08 at 13:10 +0200, Stefan Johansson wrote:
> Hi,
> Please review this enhancement to avoid spawning tasks when there is
> no 
> work to do:
> https://bugs.openjdk.java.net/browse/JDK-8153745
> Webrev:
> http://cr.openjdk.java.net/~sjohanss/8153745/hotspot.00/
> Summary:
> During post_evacuate_collection_set the call to preserve_cm_referents
> ensures that no referents discovered by the concurrent reference 
> processor are lost. This is done unconditionally and sometimes a lot
> of 
> tasks are spawned just to find that there is no work to be done. This
> enhancement avoids the unnecessary work by first checking that the 
> cm-ref-processor has at least some discovered reference to take care
> of.

  - I would prefer if the referenceprocessor would track whether there
are any references in it by itself by setting a flag while adding a
reference. I would think that this would be noise in gathering
references anyway.
While I do not think it is very problematic, consider machines having
thousands of threads (which is reality right now).

Otherwise at least, if there is no way that any references could have
been enqueued because concurrent marking is not running, add an early

  - the code should not add timing information in case there has been
no work. It will automatically show "skipped" in that case. I.e. please
move the timing stuff inside the if-block.

There is a difference between taking "0.0" time and not having executed
that is sometimes interesting to know.


More information about the hotspot-gc-dev mailing list