MemorySegment for fields

Jorn Vernee jorn.vernee at oracle.com
Fri Jan 19 22:06:16 UTC 2024


That's an interesting idea!

The idea of being able to wrap arbitrary objects came to mind in the 
past, but memory segments are contiguous, and at the time at least I 
think the concern was that objects may not always be contiguous, or that 
we don't want to expose memory in between writable fields by accident.

But, for a single primitive field, wrapping it in a MemorySegment should 
be okay I think.

WRT read-only/final fields. Since we allow segments wrapping heap 
objects to be passed to native code (which you can do with the 
critical() option), we can't guarantee that the native code won't write 
to the memory any ways. So, if we go there, I think we'd be limited to 
mutable fields. Although, if native code writes out-of-bounds, it could 
already scribble on other parts of the Java heap, so maybe writing to 
mutable fields is just more of the same. Downcalls are a restricted 
operation after all.

Jorn

On 19/01/2024 22:48, David Lloyd wrote:
> I've been experimenting quite a bit with the FFM API and one thing 
> I've noted is that it would be nice to be able to get a 
> `MemorySegment` for a field on an object and/or a static field.
>
> In the former case, the use case would be to provide a very small 
> buffer for operations which may need one (for example, reading/writing 
> an `eventfd` on Linux, reading/writing single bytes, or capturing 
> `errno` without having to allocate a segment for every operation).
>
> The latter could be useful to send constant read-only data into a 
> native call, but this is more hypothetical than practical.
>
> I don't see much difference in terms of safety/integrity between a 
> hypothetical instance field-backed `MemorySegment` compared to one 
> backed by a heap array; it's essentially the same concept (and you can 
> achieve a sort-of-similar result today by wrapping a one-element array 
> with a `MemorySegment`, in another constant field, but the overhead is 
> one extra heap object in this case). The field could be required to be 
> non-final, or perhaps a final field could be wrapped using a read-only 
> `MemorySegment`.
>
> Could this be a reasonable enhancement?
> --
> - DML • he/him
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.org/pipermail/panama-dev/attachments/20240119/99b5a2f1/attachment.htm>


More information about the panama-dev mailing list