[lworld] RFR: 8373858: [lworld] Segmented clearing for flatArrays with no oops in ZGC [v2]
Joel Sikström
jsikstro at openjdk.org
Wed Dec 17 16:22:09 UTC 2025
On Wed, 17 Dec 2025 11:03:49 GMT, Paul Hübner <phubner at openjdk.org> wrote:
>> Joel Sikström has updated the pull request incrementally with one additional commit since the last revision:
>>
>> Offline review feedback
>
> src/hotspot/share/gc/z/zObjArrayAllocator.cpp line 64:
>
>> 62: }
>> 63:
>> 64: if (is_oop_containing_flat_array(_klass)) {
>
>> A value object containing an oop and the added null-marker will always exceed 64 bits with ZGC, and therefore such objects will not be flattened in practice due to the 64-bit atomicity constraint.
>
> Is this something we can guard against in the code as well? What happens if somebody creates a null-restricted non-atomic primitive-only flat array via the `ValueClass` API? Tearing from the user's POV is absolutely okay in such a case, but will any ZGC assumptions be violated?
In my initial sanity tests I just checked what classes were getting past the new `is_oop_containing_flat_array`, without checking if the passed the size check. It turns out that there are no tests in jdk_valhalla or hotspot_valhalla where ZGC allocates a large enough primitive-only array to get into the segment clearing code.
We can't add any asserts here as we have tests which uses null-restricted and/or loosely-consistent properties.
-------------
PR Review Comment: https://git.openjdk.org/valhalla/pull/1811#discussion_r2627706607
More information about the valhalla-dev
mailing list