RFR: 8153745: Avoid spawning G1ParPreserveCMReferentsTask when there is no work to be done
jon.masamitsu at oracle.com
Mon Apr 11 17:49:04 UTC 2016
On 04/08/2016 04:45 AM, Thomas Schatzl wrote:
> On Fri, 2016-04-08 at 13:10 +0200, Stefan Johansson wrote:
>> Please review this enhancement to avoid spawning tasks when there is
>> work to do:
>> 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
>> 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
> - 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
I don't understand the need to look for the case where concurrent marking
is not running. "No reference to process" is the real condition we need to
skip the processing so why the check whether concurrent marking is
running/not running? Also, I don't trust flags about whether a phase
running or not. While they may be right today, code gets moved around
and bugs happen.
> - 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