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

Stefan Johansson sjohanss at openjdk.org
Wed Jun 4 11:27:24 UTC 2025


On Fri, 30 May 2025 08:14:34 GMT, Joel Sikström <jsikstro at openjdk.org> wrote:

>> 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 with a new target base due to a merge or a rebase. The pull request now contains 11 commits:
> 
>  - Merge branch 'master' into JDK-8357053_zpageage_utility
>  - Remove redundant access specifier
>  - Include order
>  - Style fix :)
>  - Added operator+/- for ZPageAge
>  - Fix include order in enumIterator.hpp
>  - Use T instead of EnumType
>  - Use ENUMERATOR_RANGE instead of ENUMERATOR_VALUE_RANGE
>  - Copyright years
>  - Simplify untype(ZPageAge age)
>  - ... and 1 more: https://git.openjdk.org/jdk/compare/07f5b762...3243a67a

Looks really nice. As discussed offline, adding a gtest to make sure that the ranges cover the expected ages could be an additional nice addition.

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

Marked as reviewed by sjohanss (Reviewer).

PR Review: https://git.openjdk.org/jdk/pull/25251#pullrequestreview-2896350248


More information about the hotspot-gc-dev mailing list