dissecting memory sessions
Maurizio Cimadamore
maurizio.cimadamore at oracle.com
Wed Nov 2 21:45:25 UTC 2022
In case you are interested, below are some more pointers.
First, the javadoc which contains the proposed FFM API changes:
http://cr.openjdk.java.net/~mcimadamore/panama/session_handle_hidden_javadoc/javadoc/java.base/java/lang/foreign/package-summary.html
For those of you who are more interested at the code, here is the branch
that contains the code changes:
https://github.com/mcimadamore/panama-foreign/tree/session_drop_min
And, finally, here is also a jextract branch that supports the proposed
FFM API changes:
https://github.com/mcimadamore/jextract/tree/panama_session_refresh
Cheers
Maurizio
On 02/11/2022 17:48, Maurizio Cimadamore wrote:
> Hi,
> After the first preview of the FFM API in Java 19, we have identified
> a couple of areas where the API could use some improvements:
>
> * Clarify the relationship between MemorySegment and MemoryAddress
> (this was addressed in [1]); and
> * Polish the MemorySession API, and make segments easier to (safely)
> share with external clients (what this email is about).
>
> While we have explored solutions to better encapsulate memory sessions
> in the past (e.g. by dropping session accessors, as described in [2]),
> nothing seemed to stick. So, for Java 19 we decided to leave session
> accessors on memory segments in place, but give the option to
> libraries to protect against "sneaky" close, by creating non-closeable
> memory session views.
>
> After staring at this problem long enough, it became increasingly
> clear that memory sessions, in their current shape and form, are
> trying to do too much - from allocation, to lifecycle management and
> more. The issue with "sneaky" close is mostly a manifestation of that
> more fundamental problem. In that spirit, we have put together a
> document which teases apart the various "traits" associated with
> memory sessions, and repackages the same traits into an API that
> provides better encapsulation and composition. The document can be
> found here:
>
> http://cr.openjdk.java.net/~mcimadamore/panama/session_arenas.html
>
> The main move described in the document is to make MemorySession a
> "pure" lifetime abstraction, thus dropping SegmentAllocator and
> AutoCloseable capabilities. Instead, these capabilities are provided
> by a *second* abstraction, called Arena. Crucially, an Arena _has_ a
> memory session, which can e.g. be used to allocate segments that have
> the same lifecycle as that of the arena. This subtle twist, gives us
> an API that is easier to reason about (and to build upon), and one
> where memory segments can be shared freely across clients - premature
> calls to MemorySession::close are no longer possible. At the same
> time, the API now makes a much clearer distinction between sessions
> that are closeable (i.e. sessions created through an Arena) and those
> that aren't (i.e. implicit and global sessions).
>
> Here's a list of the main API changes, and how they will impact
> clients of the FFM API:
>
> * MemorySession no longer has a close() method; try-with-resources
> against MemorySession will now need to use Arena instead;
> * Support for non-closeable session views
> (MemorySession::asNonCloseable), and related methods
> (MemorySession::equals/hashCode) has been removed;
> * MemorySession::addCloseAction has been removed; instead, clients can
> specify a cleanup action when creating an unsafe segment (i.e. using
> MemorySegment::ofAddress);
> * Some of the predicates in MemorySession have been made more robust -
> e.g. instead of MemorySession::ownerThread(), there is now a predicate
> MemorySession::isOwnedBy(Thread).
>
> After careful consideration, we believe that the changes described in
> this document are worth pursuing for the upcoming Java 20 integration
> [3]: they make the API more principled (no more "sneaky" close), while
> retaining a similar expressive power.
>
> Any feedback is greatly appreciated.
>
> Cheers
> Maurizio
>
> [1] -
> https://cr.openjdk.java.net/~mcimadamore/panama/segment_address.html
> [2] -
> https://mail.openjdk.org/pipermail/panama-dev/2022-February/016152.html
> [3] -
> https://mail.openjdk.org/pipermail/panama-dev/2022-February/016152.html
>
>
More information about the panama-dev
mailing list