[foreign-memaccess] RFR: JDK-8241154: Clarify the role of MemorySegments

Maurizio Cimadamore mcimadamore at openjdk.java.net
Wed Mar 18 15:16:29 UTC 2020


This patch proposes a restacking of the memory access API. Currently, memory segments are playing a dual role: they are
both view of a resource, and they impersonate the resource itself. This creates confusion when thinking about
operationssuch as close() and acquire().

The idea put forward by this patch is to put all segments on equal footing; e.g. remove the distinction between normal
segments and *acquired* segments. Now *all* segments are, in a sense, acquired from some memory *source*. A memory
source, in other words, model the actual memory that the segment is a view of.

Memory sources are unconfined, which makes them ideal to support operation such as registration with cleaners (to allow
for automatic cleanup, where needed). Moreover, since we can support many kinds of memory sources, this patch also adds
a MappedMemorySource which is specific to mapped segments; such memory source contains methods for syncing contents of
memory against the mapped file (e.g. force()).

This split between memory segment and memory source allows us to keep the memory segment API sane, while at the same
time providing us room to expand the API in the future to add more memory sources. And it makes the API cleaner too, as
we can put methods where they belong (e.g. see difference between MemorySegment::isAlive vs. MemorySource::isReleased).

A javadoc for this refactoring is available here:

http://cr.openjdk.java.net/~mcimadamore/panama/8241154_javadoc/javadoc/jdk/incubator/foreign/package-summary.html

Many thanks to Brian, John, Jorn, Paul and Stuart for the feedback which led to this iteration.

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

Commit messages:
 - JDK-8241154: Clarify the role of MemorySegments
 - fix javadoc
 - Complete API implementation
 - Partially flat API
 - Initial push; v2
 - Initial push

Changes: https://git.openjdk.java.net/panama-foreign/pull/54/files
 Webrev: https://webrevs.openjdk.java.net/panama-foreign/54/webrev.00
  Issue: https://bugs.openjdk.java.net/browse/JDK-JDK-8241154
  Stats: 772 lines in 20 files changed: 592 ins; 99 del; 81 mod
  Patch: https://git.openjdk.java.net/panama-foreign/pull/54.diff
  Fetch: git fetch https://git.openjdk.java.net/panama-foreign pull/54/head:pull/54

PR: https://git.openjdk.java.net/panama-foreign/pull/54


More information about the panama-dev mailing list