[foreign-memaccess] RFR 8224614: Cleanup MemoryScope and its implementation
Maurizio Cimadamore
maurizio.cimadamore at oracle.com
Wed May 22 17:40:57 UTC 2019
Hi,
this patch implements the approach described in [1].
I've refactored MemoryScopeImpl into an abstract class
(AbstractMemoryScopeImpl) and two concrete subclasses:
* GlobalMemoryScopeImpl - for global scopes (roots of scope hierarchies)
* ConfinedMemoryScopeImpl - for 'local' scopes (created using fork)
The former is shared across multiple threads, but there's no need for
synchronization as there's no mutable state (as global scopes can't be
closed).
The latter is thread-confined - which means only the thread owner (which
is established at scope-creation time) can do scope operations such as
fork/allocate/merge/close.
I've also cleaned up the various characteristics flags in MemoryScope;
some of those made no longer sense, since we decided against having
VarHandle for reading/writing addresses directly. I kept the following:
* PINNED - used to mark scopes that cannot be closed; it's a property of
global scopes and cannot be set w/o super-user powers
* IMMUTABLE - means that the underlying memory cannot be written to
* UNALIGNED - means that we allow memory writes when addresses do not
conform to the alignment requirements of the layout from which the
VarHandle was created
* CONFINED - means that memory associated with the scope can be accessed
only within the owning thread
All characteristics are disabled by default - and it's up to the client
to set them. There's no 'inheritance' of characteristics either from
parents to children.
Webrev:
http://cr.openjdk.java.net/~mcimadamore/panama/8224614/
Cheers
Maurizio
[1] -
https://mail.openjdk.java.net/pipermail/panama-dev/2019-May/005494.html
More information about the panama-dev
mailing list