RFR: 8140257: Add support for "gc service threads" to ConcurrentGCThread
Derek White
derek.white at oracle.com
Thu Mar 3 17:14:29 UTC 2016
RFR 2nd version.
New version is focused on making ConcurrentMarkSweepThread a proper
subclass of ConcurrentGCThread, especially related to sharing the same
initialization and termination protocols. See incremental webrev
<http://cr.openjdk.java.net/%7Edrwhite/8140257/webrev.01.v.02/> for details.
* Move CMS-specific code to run_service()/stop_service(), inherit
run()/stop() methods.
* Removed ConcurrentMarkSweepThread::_should_terminate, use inherited
_should_terminate instead.
* Use the inherited _has_terminated flag instead of _cmst to denote
termination. Users call cmst() instead of reading _cmst.
* Change ConcurrentMarkSweepThread::start() and stop() to match G1's
handling - assume stop() only called after start(), so
ConcurrentGCThread objects have been created.
o CMS and G1 start() methods called in same place:
Universe::Initialize_heap(), and the stop() methods are called
in same place: before_exit(), so they have the same lifetimes
for their ConcurrentGCThreads.
*Bug*: https://bugs.openjdk.java.net/browse/JDK-8140257
*Webrev*: http://cr.openjdk.java.net/~drwhite/8140257/webrev.02/
*Incremental 1 vs 2*:
http://cr.openjdk.java.net/~drwhite/8140257/webrev.01.v.02/
*Tests*:
- jprt
- Aurora Perf (including Startup3-Server-CMS, Footprint3-Server-CMS)
- Aurora Test "hs-nightly-gc-cms".
Thanks for looking!
- Derek
On 2/26/16 11:51 PM, Derek White wrote:
> I'm working on a new webrev, so please hold off on reviewing.
>
> Some offline comments from Kim suggest trying another approach. Any
> other approach :-) He rightly pointed out the poor match between the
> new code and ConcurrentMarkSweepThread is pretty ugly.
>
> Two other options I'm looking at are either having
> ConcurrentMarkSweepThread not subclass from ConcurrentGCThread, or
> (more likely) refactor ConcurrentMarkSweepThread to use the common
> termination protocol instead of doing it's own thing. The approach of
> adding an intermediate class that handles the common code being
> factored out was rejected in review comments for "8138920".
>
> - Derek
>
> On 2/26/16 11:56 AM, Derek White wrote:
>> *Background*:
>> ConcurrentGCThread provides incomplete support for an initialization
>> and termination protocol for GC threads, so missing parts are
>> duplicated in almost all subclasses.
>>
>> *Fix*:
>> Move duplicated run(), and stop() methods up from subclasses
>> ConcurrentG1RefineThread, ConcurrentMarkThread, G1StringDedupThread,
>> and G1YoungRemSetSamplingThread to ConcurrentGCThread, as well as
>> declare virtual methods run_service() and stop_service.
>>
>> Note that ConcurrentMarkSweepThread is the odd-ball subclass. It
>> implements it's own termination protocol, it provides it's own run()
>> and stop() methods, and does not use run_service() and stop_service().
>>
>> *Bug*: https://bugs.openjdk.java.net/browse/JDK-8140257
>> *Webrev*: http://cr.openjdk.java.net/~drwhite/8140257/webrev.01/
>>
>> *Tests*: jprt, Aurora "nightly" run (I think this is OK)
>> http://aurora.ru.oracle.com/faces/Batch.xhtml?batchName=1325690.VMSQE.adhoc.JPRT
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.org/pipermail/hotspot-gc-dev/attachments/20160303/c9f6e7df/attachment.htm>
More information about the hotspot-gc-dev
mailing list