RFR: 8254739: G1: Optimize evacuation failure for regions with few failed objects

Hamlin Li mli at openjdk.java.net
Thu Aug 19 08:19:43 UTC 2021


This is a try to optimize evcuation failure for regions.
I record every evacuation failure object per region (by G1EvacuationFailureObjsInHR), and then iterate (which indeed includes compact/sort/iteration) these objects directly in RemoveSelfForwardPtrHRClosure.

I have tested it with following parameters, 

-   -XX:+ParallelGCThreads=1/32/64
-   -XX:G1EvacuationFailureALotInterval=1
-   -XX:G1EvacuationFailureALotCount=2/10/100/1000/10000/100000

It saves "Remove Self Forwards" time all the time ,and in most condition it saves "Evacuate Collection Set" time. 

It brings some performance degradation when -XX:G1EvacuationFailureALotCount is low, such as *2*. To improve this a little, we can record the number evacuation failure object per region, and not record these objects when the number hit some limit. But I'm not sure if it's necessary to do so, as I think such condition is so extreme to be met in real environment, although I'm not quite sure.

-------------

Commit messages:
 - fix: reset state after iteration
 - speed up iterate evac failure objs in one region.

Changes: https://git.openjdk.java.net/jdk/pull/5181/files
 Webrev: https://webrevs.openjdk.java.net/?repo=jdk&pr=5181&range=00
  Issue: https://bugs.openjdk.java.net/browse/JDK-8254739
  Stats: 283 lines in 6 files changed: 241 ins; 31 del; 11 mod
  Patch: https://git.openjdk.java.net/jdk/pull/5181.diff
  Fetch: git fetch https://git.openjdk.java.net/jdk pull/5181/head:pull/5181

PR: https://git.openjdk.java.net/jdk/pull/5181



More information about the hotspot-gc-dev mailing list