[jdk21u-dev] Integrated: 8325754: Dead AbstractQueuedSynchronizer$ConditionNodes survive minor garbage collections
Neethu Prasad
duke at openjdk.org
Mon Jun 24 08:31:26 UTC 2024
On Mon, 17 Jun 2024 22:12:49 GMT, Neethu Prasad <duke at openjdk.org> wrote:
> **Notes**
> Backport of [JDK-8325754](https://bugs.openjdk.org/browse/JDK-8325754).
>
> Unlink 'ConditionNode' before they are transferred to the sync queue as G1 seems to be able to collect “dead” ConditionNode instances during minor collections only if no formerly alive ConditionNode instances were promoted to the old generation and died there, which often cannot be avoided since e.g. on application startup many objects are promoted to the old generation after a few collections.
>
> **Verification**
>
> * jdk_util, Tier 1 & Tier 2 tests passed.
> * Ran G1LoiteringConditionNodes.java (sample code from bug description) and verified that YG GC time is not increasing after full GC.
>
> _Before PR_
>
>
> dev-dsk-neethp-jdk-2c-ad54955c % /home/neethp/Development/jdk21u-dev/build/linux-x86_64-server-release/images/jdk/bin/java -Xms2048m -Xmx2048m -XX:+UseG1GC -XX:+UnlockExperimentalVMOptions -XX:G1MaxNewSizePercent=20 '-Xlog:gc*,gc+age*=trace' -cp . G1LoiteringConditionNodes | grep -E 'Pause.*ms'
> [0.949s][info ][gc ] GC(0) Pause Young (Normal) (G1 Evacuation Pause) 103M->1M(2048M) 4.998ms
> [2.550s][info ][gc ] GC(1) Pause Young (Normal) (G1 Evacuation Pause) 154M->1M(2048M) 2.513ms
> [6.963s][info ][gc ] GC(2) Pause Young (Normal) (G1 Evacuation Pause) 409M->1M(2048M) 3.213ms
> [11.362s][info ][gc ] GC(3) Pause Young (Normal) (G1 Evacuation Pause) 409M->1M(2048M) 2.602ms
> [15.737s][info ][gc ] GC(4) Pause Young (Normal) (G1 Evacuation Pause) 409M->1M(2048M) 2.654ms
> [20.149s][info ][gc ] GC(5) Pause Young (Normal) (G1 Evacuation Pause) 409M->1M(2048M) 2.192ms
> [24.570s][info ][gc ] GC(6) Pause Young (Normal) (G1 Evacuation Pause) 409M->1M(2048M) 2.210ms
> [29.003s][info ][gc ] GC(7) Pause Young (Normal) (G1 Evacuation Pause) 409M->1M(2048M) 2.158ms
> [33.432s][info ][gc ] GC(8) Pause Young (Normal) (G1 Evacuation Pause) 409M->1M(2048M) 2.839ms
> [37.875s][info ][gc ] GC(9) Pause Young (Normal) (G1 Evacuation Pause) 409M->1M(2048M) 2.261ms
> [42.306s][info ][gc ] GC(10) Pause Young (Normal) (G1 Evacuation Pause) 409M->1M(2048M) 2.131ms
> [46.743s][info ][gc ] GC(11) Pause Young (Normal) (G1 Evacuation Pause) 409M->1M(2048M) 2.024ms
> [51.184s][info ][gc ] GC(12) Pause Young (Normal) (G1 Evacuation Pause) 409M->1M(2048M) 2.231ms
> [55.596s][info ][gc ] GC(13) Pause Young (Normal) (G1 Evacuation Pause) 409M->1M(2048M) 2.842ms
> [60.036s][info ][gc ] GC(14)...
This pull request has now been integrated.
Changeset: 241b054a
Author: Neethu Prasad <neethp at amazon.com>
Committer: Christoph Langer <clanger at openjdk.org>
URL: https://git.openjdk.org/jdk21u-dev/commit/241b054a59caf443dd8f252e54ccaf37d314ea02
Stats: 10 lines in 2 files changed: 10 ins; 0 del; 0 mod
8325754: Dead AbstractQueuedSynchronizer$ConditionNodes survive minor garbage collections
Backport-of: 60cbf2925024b1c2253256688ae41741fff0a860
-------------
PR: https://git.openjdk.org/jdk21u-dev/pull/735
More information about the jdk-updates-dev
mailing list