RFR: 8347337: ZGC: String dedups short-lived strings [v2]
Stefan Karlsson
stefank at openjdk.org
Tue Mar 11 09:33:20 UTC 2025
> When -XX:+UseStringDeduplication is turned on, ZGC requests that every single String it encounters is deduplicated. The Strings of these requests are saved in weak handles, and then processed by a separate thread. One problematic part with this is that ZGC treats these handles as strong roots for young collections. So, even if the Strings are short-lived they will be artificially kept alive until they get promoted up to the old generation.
>
> This creates an extreme amount of Strings and weak handles to be processed by the old collection, which can result in long major collections and allocation stalls.
>
> Other GCs have a filter to check for how old the Strings are before they get deduplicated.
>
> The proposed fix is to move the string deduplication requests to when the Strings are promoted to the old generation.
>
> Testing:
>
> * I've tested this with a small micro that showed how ZGC got extremely long major collections with string deduplication turned on.
>
> * SPECjbb2015 with a JVMTI agent that induces load and adds deduplicatable strings.
>
> * Tier1-7
>
> Note: I'm currently not aware of any non-artificial workload where string deduplication is an important optimization when running with Generational ZGC. If anyone knows of a workload that greatly benefits from it *AND* uses ZGC as a low-latency collector, then that would be highly interesting to look at.
>
> Note 2: the branch contains two changesets. In the first changeset I added a flag to be able to test and compare the old implementation with the new implementation. For the final PR I've removed that flag and the associated code as a second changeset. If we really want we could keep that flag, but given how poorly that implementation worked for Generational ZGC, I think we should just go with this new implementation.
Stefan Karlsson has updated the pull request incrementally with two additional commits since the last revision:
- Make ZPageAge ZForwarding member fileds constant
- Review comments
-------------
Changes:
- all: https://git.openjdk.org/jdk/pull/23965/files
- new: https://git.openjdk.org/jdk/pull/23965/files/d7579b95..12ad843f
Webrevs:
- full: https://webrevs.openjdk.org/?repo=jdk&pr=23965&range=01
- incr: https://webrevs.openjdk.org/?repo=jdk&pr=23965&range=00-01
Stats: 4 lines in 2 files changed: 0 ins; 1 del; 3 mod
Patch: https://git.openjdk.org/jdk/pull/23965.diff
Fetch: git fetch https://git.openjdk.org/jdk.git pull/23965/head:pull/23965
PR: https://git.openjdk.org/jdk/pull/23965
More information about the hotspot-gc-dev
mailing list