RFR: Defer cleaning of system dictionary and friends to parallel cleaning phase

Zhengyu Gu zgu at redhat.com
Tue Jan 16 19:48:25 UTC 2018



On 01/16/2018 01:15 PM, Roman Kennke wrote:
> Am 16.01.2018 um 19:09 schrieb Aleksey Shipilev:
>> On 01/16/2018 06:59 PM, Roman Kennke wrote:
>>> Found this during traversal GC work: when cleaning the system 
>>> dictionary and friends, we do clean it
>>> in the first pass, *single threaded* and then do the cleaning stuff 
>>> again, but multi-threaded. We
>>> shall defer cleaning to the parallel phase to begin with. That's what 
>>> G1 does too.
>>>
>>> http://cr.openjdk.java.net/~rkennke/defer_cleaning/webrev.00/
>>>
>>
>> Awwwwwwww.
>>
>> Note that in G1, there are two calls to do_unloading: one from 
>> weak_refs_work with "false", and
>> another from mark_sweep_phase1 with default "true".
> 
> For ordinary concurrent GCs, it cleans everything in parallel phase, and 
> thus passes 'false' to do_unloading(). For full-GC, I guess they don't 
> care and do everything single-threaded.
> 
>> Are you saying that doing this once with "false" is enough? It looks 
>> that ParallelCleaning stuff
>> purges ResolvedMethodTable, but does it do 
>> ClassLoaderDataGraph::do_unloading with
>> clean_previous_versions? Maybe we should cautiously say "full_gc", not 
>> "false" in the patch, so
>> last-ditch can still do it?
> 
> I believe the ParallelCleaning handles everything. Zhengyu?
ParallelCleaning does handle ResolvedMethodTable ...

-Zhengyu


> 
> Roman


More information about the shenandoah-dev mailing list