[lworld] RFR: 8377451: [lworld] Add ValuePayload abstraction
Axel Boldt-Christmas
aboldtch at openjdk.org
Mon Feb 9 22:04:21 UTC 2026
Create a wrapper class which represents the payload of an InlineKlass object.
The current convention is to use a `void*` representing where the payload starts, the `InlineKlass*` (as we do not always have a header when flattened) and a `LayoutKind` (describing the payloads layout).
I suggest we introduce something like a `ValuePayload` which encapsulate these properties. As well as a hierarchy built upon these, with the proper interfaces implemented.
* ValuePayload (Any payload)
* RawValuePayload (Payload with holder erased)
* BufferedValuePayload (Payload of normal heap object)
* FlatValuePayload (Payload of flattened value)
* FlatFieldPayload (Payload of flattened field)
* FlatArrayPayload (Payload of flattened array element)
The goal is to both make interfaces clearer, and easier to understand. As well as consolidating the implementation in one place rather than spread across different subsystems.
Each type (except RawValuePayload) also allows for the creation of a Handle, (thread local, or in an OopStorage) for keeping the payload as a thread or global root.
The ValuePayload class is also the interface for interacting with the Access API for InlineKlass objects.
* Testing
* Running tier 1-4 with preview enabled
* Running app tests with preview enabled
* Running normal tier 1-5
#### _Extra Notes:_
* The `OopHandle` type is there so that we can migrate the JVMTI payload abstraction implementation to using this instead. (Future RFE)
* Some interfaces got cleaned up. Some are unused. Like the `null_payload` which was superseded by the `Access::value_store_null`. C1 still uses the `.null_reset` but if that dependency is removed we should be able to remove that weird object all together.
* Simply adding the Java to VM transition deep inside the payload code created a circular include dependency here. So rather than fixing that, I implemented the relevant bytecodes in the BytecodeInterpreter.
-------------
Commit messages:
- stefank some comments inlineKlassPayload.inline.hpp
- Rename the get_ prefixed accessors
- stefank inlineKlassPayload.hpp comments
- stefank comment jvm.cpp
- stefank comment jni.cpp
- stefank comments oopsHierarchy.hpp
- stefank comments inlineKlass*
- stefank comments flatArrayKlass.cpp
- stefank comments access.inline.hpp
- stefank comments interpreterRuntime.cpp
- ... and 31 more: https://git.openjdk.org/valhalla/compare/b3616f9a...b4bc49fd
Changes: https://git.openjdk.org/valhalla/pull/2068/files
Webrev: https://webrevs.openjdk.org/?repo=valhalla&pr=2068&range=00
Issue: https://bugs.openjdk.org/browse/JDK-8377451
Stats: 2033 lines in 38 files changed: 1641 ins; 235 del; 157 mod
Patch: https://git.openjdk.org/valhalla/pull/2068.diff
Fetch: git fetch https://git.openjdk.org/valhalla.git pull/2068/head:pull/2068
PR: https://git.openjdk.org/valhalla/pull/2068
More information about the valhalla-dev
mailing list