[lworld] Integrated: 8377451: [lworld] Add ValuePayload abstraction

Axel Boldt-Christmas aboldtch at openjdk.org
Tue Feb 24 07:15:19 UTC 2026


On Mon, 9 Feb 2026 09:35:48 GMT, Axel Boldt-Christmas <aboldtch at openjdk.org> wrote:

> 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)~ (Removed in favour of using a static function)
>   * 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.

This pull request has now been integrated.

Changeset: dba91f1b
Author:    Axel Boldt-Christmas <aboldtch at openjdk.org>
URL:       https://git.openjdk.org/valhalla/commit/dba91f1b9420de5b1b3363858a7957d0dc296de5
Stats:     2217 lines in 39 files changed: 1812 ins; 237 del; 168 mod

8377451: [lworld] Add ValuePayload abstraction

Reviewed-by: fparain

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

PR: https://git.openjdk.org/valhalla/pull/2068


More information about the valhalla-dev mailing list