-
Enhancement
-
Resolution: Unresolved
-
P4
-
None
Currently G1 sorts the collection set candidates after collection set selection to avoid freeing the collection set taking a long time (introduced in JDK-8165313).
In a later change the cause for this long pause has been fixed (JDK-8165443), but the sorting not removed.
Finally, remove the unnecessary sorting.
According to these CRs, running gcbasher with -Xmx20G -Xms20G -XX:G1HeapRegionSize=1m -XX:G1NewSizePercent=70 -XX:G1MaxNewSizePercent=85 makes G1 pauses take a long time.
Current log output shows that there is no difference with or without the sorting, showing the "Free Collection Set" and "Rebuild Free List" phases before and after the change:
Rebuild free list:
```
before:[6.847s][debug][gc,phases] GC(0) Rebuild Free List: 0.31ms
before:[10.499s][debug][gc,phases] GC(1) Rebuild Free List: 0.33ms
before:[14.120s][debug][gc,phases] GC(2) Rebuild Free List: 0.32ms
before:[17.749s][debug][gc,phases] GC(3) Rebuild Free List: 0.31ms
before:[21.376s][debug][gc,phases] GC(4) Rebuild Free List: 0.30ms
before:[24.994s][debug][gc,phases] GC(5) Rebuild Free List: 0.36ms
before:[28.652s][debug][gc,phases] GC(6) Rebuild Free List: 0.29ms
after:[6.126s][debug][gc,phases] GC(0) Rebuild Free List: 0.30ms
after:[9.718s][debug][gc,phases] GC(1) Rebuild Free List: 0.30ms
after:[13.311s][debug][gc,phases] GC(2) Rebuild Free List: 0.31ms
after:[16.901s][debug][gc,phases] GC(3) Rebuild Free List: 0.31ms
after:[20.487s][debug][gc,phases] GC(4) Rebuild Free List: 0.32ms
after:[24.070s][debug][gc,phases] GC(5) Rebuild Free List: 0.31ms
after:[27.683s][debug][gc,phases] GC(6) Rebuild Free List: 0.36ms
```
```
before:[6.847s][debug][gc,phases] GC(0) Free Collection Set (ms): Min: 0.07, Avg: 0.50, Max: 0.61, Diff: 0.55, Sum: 4.02, Workers: 8
before:[10.499s][debug][gc,phases] GC(1) Free Collection Set (ms): Min: 0.30, Avg: 0.36, Max: 0.45, Diff: 0.15, Sum: 2.86, Workers: 8
before:[14.120s][debug][gc,phases] GC(2) Free Collection Set (ms): Min: 0.07, Avg: 0.60, Max: 0.73, Diff: 0.66, Sum: 4.79, Workers: 8
before:[17.749s][debug][gc,phases] GC(3) Free Collection Set (ms): Min: 0.05, Avg: 0.50, Max: 0.64, Diff: 0.58, Sum: 4.01, Workers: 8
before:[21.376s][debug][gc,phases] GC(4) Free Collection Set (ms): Min: 0.06, Avg: 0.60, Max: 0.71, Diff: 0.65, Sum: 4.80, Workers: 8
before:[24.994s][debug][gc,phases] GC(5) Free Collection Set (ms): Min: 0.07, Avg: 0.77, Max: 0.93, Diff: 0.86, Sum: 6.18, Workers: 8
before:[28.652s][debug][gc,phases] GC(6) Free Collection Set (ms): Min: 0.06, Avg: 0.63, Max: 0.76, Diff: 0.70, Sum: 5.01, Workers: 8
after:[6.126s][debug][gc,phases] GC(0) Free Collection Set (ms): Min: 0.48, Avg: 0.59, Max: 0.71, Diff: 0.23, Sum: 4.69, Workers: 8
after:[9.718s][debug][gc,phases] GC(1) Free Collection Set (ms): Min: 0.05, Avg: 0.54, Max: 0.65, Diff: 0.60, Sum: 4.35, Workers: 8
after:[13.311s][debug][gc,phases] GC(2) Free Collection Set (ms): Min: 0.08, Avg: 0.37, Max: 0.46, Diff: 0.39, Sum: 2.92, Workers: 8
after:[16.901s][debug][gc,phases] GC(3) Free Collection Set (ms): Min: 0.49, Avg: 0.58, Max: 0.65, Diff: 0.16, Sum: 4.60, Workers: 8
after:[20.487s][debug][gc,phases] GC(4) Free Collection Set (ms): Min: 0.07, Avg: 0.61, Max: 0.73, Diff: 0.66, Sum: 4.90, Workers: 8
after:[24.070s][debug][gc,phases] GC(5) Free Collection Set (ms): Min: 0.36, Avg: 0.45, Max: 0.55, Diff: 0.20, Sum: 3.58, Workers: 8
after:[27.683s][debug][gc,phases] GC(6) Free Collection Set (ms): Min: 0.04, Avg: 0.38, Max: 0.50, Diff: 0.46, Sum: 3.01, Workers: 8
```
I.e. no difference.
In a later change the cause for this long pause has been fixed (
Finally, remove the unnecessary sorting.
According to these CRs, running gcbasher with -Xmx20G -Xms20G -XX:G1HeapRegionSize=1m -XX:G1NewSizePercent=70 -XX:G1MaxNewSizePercent=85 makes G1 pauses take a long time.
Current log output shows that there is no difference with or without the sorting, showing the "Free Collection Set" and "Rebuild Free List" phases before and after the change:
Rebuild free list:
```
before:[6.847s][debug][gc,phases] GC(0) Rebuild Free List: 0.31ms
before:[10.499s][debug][gc,phases] GC(1) Rebuild Free List: 0.33ms
before:[14.120s][debug][gc,phases] GC(2) Rebuild Free List: 0.32ms
before:[17.749s][debug][gc,phases] GC(3) Rebuild Free List: 0.31ms
before:[21.376s][debug][gc,phases] GC(4) Rebuild Free List: 0.30ms
before:[24.994s][debug][gc,phases] GC(5) Rebuild Free List: 0.36ms
before:[28.652s][debug][gc,phases] GC(6) Rebuild Free List: 0.29ms
after:[6.126s][debug][gc,phases] GC(0) Rebuild Free List: 0.30ms
after:[9.718s][debug][gc,phases] GC(1) Rebuild Free List: 0.30ms
after:[13.311s][debug][gc,phases] GC(2) Rebuild Free List: 0.31ms
after:[16.901s][debug][gc,phases] GC(3) Rebuild Free List: 0.31ms
after:[20.487s][debug][gc,phases] GC(4) Rebuild Free List: 0.32ms
after:[24.070s][debug][gc,phases] GC(5) Rebuild Free List: 0.31ms
after:[27.683s][debug][gc,phases] GC(6) Rebuild Free List: 0.36ms
```
```
before:[6.847s][debug][gc,phases] GC(0) Free Collection Set (ms): Min: 0.07, Avg: 0.50, Max: 0.61, Diff: 0.55, Sum: 4.02, Workers: 8
before:[10.499s][debug][gc,phases] GC(1) Free Collection Set (ms): Min: 0.30, Avg: 0.36, Max: 0.45, Diff: 0.15, Sum: 2.86, Workers: 8
before:[14.120s][debug][gc,phases] GC(2) Free Collection Set (ms): Min: 0.07, Avg: 0.60, Max: 0.73, Diff: 0.66, Sum: 4.79, Workers: 8
before:[17.749s][debug][gc,phases] GC(3) Free Collection Set (ms): Min: 0.05, Avg: 0.50, Max: 0.64, Diff: 0.58, Sum: 4.01, Workers: 8
before:[21.376s][debug][gc,phases] GC(4) Free Collection Set (ms): Min: 0.06, Avg: 0.60, Max: 0.71, Diff: 0.65, Sum: 4.80, Workers: 8
before:[24.994s][debug][gc,phases] GC(5) Free Collection Set (ms): Min: 0.07, Avg: 0.77, Max: 0.93, Diff: 0.86, Sum: 6.18, Workers: 8
before:[28.652s][debug][gc,phases] GC(6) Free Collection Set (ms): Min: 0.06, Avg: 0.63, Max: 0.76, Diff: 0.70, Sum: 5.01, Workers: 8
after:[6.126s][debug][gc,phases] GC(0) Free Collection Set (ms): Min: 0.48, Avg: 0.59, Max: 0.71, Diff: 0.23, Sum: 4.69, Workers: 8
after:[9.718s][debug][gc,phases] GC(1) Free Collection Set (ms): Min: 0.05, Avg: 0.54, Max: 0.65, Diff: 0.60, Sum: 4.35, Workers: 8
after:[13.311s][debug][gc,phases] GC(2) Free Collection Set (ms): Min: 0.08, Avg: 0.37, Max: 0.46, Diff: 0.39, Sum: 2.92, Workers: 8
after:[16.901s][debug][gc,phases] GC(3) Free Collection Set (ms): Min: 0.49, Avg: 0.58, Max: 0.65, Diff: 0.16, Sum: 4.60, Workers: 8
after:[20.487s][debug][gc,phases] GC(4) Free Collection Set (ms): Min: 0.07, Avg: 0.61, Max: 0.73, Diff: 0.66, Sum: 4.90, Workers: 8
after:[24.070s][debug][gc,phases] GC(5) Free Collection Set (ms): Min: 0.36, Avg: 0.45, Max: 0.55, Diff: 0.20, Sum: 3.58, Workers: 8
after:[27.683s][debug][gc,phases] GC(6) Free Collection Set (ms): Min: 0.04, Avg: 0.38, Max: 0.50, Diff: 0.46, Sum: 3.01, Workers: 8
```
I.e. no difference.
- caused by
-
JDK-8165443 Free Collection Set serial phase takes very long on large heaps
-
- Resolved
-
- links to
-
Review(pr/26670) openjdk/jdk/26676