This is a cleanup of the memory session implementation. The main new concept is 
that `MemorySessionImpl` is split into two parts: there is an implementation of 
memory session and then there is a state abstraction 
(`MemorySessionImpl.State`). This allows to share the state across multiple 
session views, in a more clean way. The big consequence of this change is that 
the routines on `ScopedMemoryAccess` now have to be defined in terms of the 
state abstraction (but the changes are mostly mechanical).

I have consolidated the implementation quite a bit, by removing all the 
duplicated logic for issuing similar-looking exceptions. I have also addressed 
an issue with `checkValidState` throwing a _new_ `WrongThreadException` instead 
of using a singleton (which is what the logic for closing down shared session 
requires, to avoid stack walks that are too deep).

`MemorySession.State::checkValidState` is now fully monomorphic; when looking 
at benchmarks, this seems to be the best solution in order to make things fast. 
Specializing implmentations to remove few plain checks does not buy enough, and 
always has the risk of adding profile pollution.


Commit messages:
 - Add null check on Buffer::checkState
 - Add docs
 - Simplify checkValidState
 - Add fastpath for implicit session state
 - Merge branch 'master' into cleanup_memory_session_impl_keep_list
 - Fix asNonCloseable to return self
 - Drop MemorySession interface type from AbstractMemorySessionImpl
 - Simplify code by removing intermediate getUnsafeBase/getUnsafeOffset methods
 - Simplify readOnly check
 - Add @ForceInline in hot path from var handle access
 - ... and 3 more:

  Stats: 1752 lines in 39 files changed: 407 ins; 525 del; 820 mod
  Fetch: git fetch pull/9017/head:pull/9017


Reply via email to