RFR: 8190711: Assert in G1MMUTracker due to concurrent modification

sangheon.kim sangheon.kim at oracle.com
Wed Nov 8 15:07:07 UTC 2017

Hi Stefan,

Thank you for fixing this bug!

On 11/08/2017 02:47 AM, Stefan Johansson wrote:
> Hi all,
> Please review this fix for:
> https://bugs.openjdk.java.net/browse/JDK-8190711
> Webrev:
> http://cr.openjdk.java.net/~sjohanss/8190711/00/
> Summary:
> The G1MMUTracker is used both by the concurrent gc threads and during 
> STW by the VM thread. Up until this change we have had modifications 
> done to the internal data structure from both sides. To synchronize we 
> have used the SuspendibleThreadSet but this doesn't stop two different 
> concurrent threads from modifying the data at the same time. We need 
> to prevent this.
> The reason to update the data structure (remove entires) in the 
> concurrent phase is a possible performance improvement due to having 
> fewer entries to iterate when calling when_sec(). Since there can 
> never be more than 64 entries, the gain, if any, is very small. We 
> still remove expired entries when adding new ones, done by add_pause() 
> during STW. To avoid having more than one thread doing modification of 
> the list this change removes the call to remove_expired_entries() in 
> when_sec(). Having the SuspendibleThreadSet will ensure the the 
> concurrent threads won't access the data while the VM thread is 
> updating it.
Looks good.


> Testing:
> * Tier 1-2
> Thanks,
> Stefan

More information about the hotspot-gc-dev mailing list