RFR: 8357053: ZGC: Improved utility for ZPageAge [v4]

Joel Sikström jsikstro at openjdk.org
Tue May 27 10:52:36 UTC 2025


> Hello,
> 
> This RFE improves utility for converting to/from, iterating over and defining structures that are indexed using the `ZPageAge` type.
> 
> Converting to/from ZPageAge and its underlying type (uint8_t, often just uint) is currently done via using static_cast. This works fine because sane values are converted in all use cases. However, to make conversion safer (and also more readable), I propose we add a `to_zpageage` and a corresponding `untype` that checks that the conversion is valid. Such conversion methods should be used instead of calling `static_cast<uint/ZPageAge>`.
> 
> We currently define a value called `ZPageAgeMax`, which is defined as `static_cast<uint>(ZPageAge::old)`. The majority of places that use this value actualy use `ZPageAgeMax + 1`, which is equivalent to the number of ages. Instead, I propose we define and use a value that represents the number of possible ages, called `ZPageAgeCount`.
> 
> Lastly, to make iterating over ages more accessible, I propose we create an intreface of enum iterators of ZPageAge. This will also create a foundation for generating values that require a ZPageAge in the future. Since the end of the enum iterators are exclusive, I've opted to use the following value as end for the iterators:
> 
> constexpr ZPageAge ZPageAgeLastPlusOne = static_cast<ZPageAge>(ZPageAgeCount);
> 
> 
> I see us using either this or a sentinel/dummy value at the end of the enum class, but I prefer having a value similar to `ZPageAgeLastPlusOne` over a dummy value.
> 
> Testing:
> * Oracle's tier 1-4
> * GHA

Joel Sikström has updated the pull request incrementally with two additional commits since the last revision:

 - Remove redundant access specifier
 - Include order

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

Changes:
  - all: https://git.openjdk.org/jdk/pull/25251/files
  - new: https://git.openjdk.org/jdk/pull/25251/files/25ddc320..2ea85308

Webrevs:
 - full: https://webrevs.openjdk.org/?repo=jdk&pr=25251&range=03
 - incr: https://webrevs.openjdk.org/?repo=jdk&pr=25251&range=02-03

  Stats: 4 lines in 2 files changed: 1 ins; 3 del; 0 mod
  Patch: https://git.openjdk.org/jdk/pull/25251.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/25251/head:pull/25251

PR: https://git.openjdk.org/jdk/pull/25251


More information about the hotspot-gc-dev mailing list