On Fri, 3 Jun 2022 15:47:21 GMT, Maurizio Cimadamore <mcimadam...@openjdk.org> 

> 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.

Note: other cleanups are possible - such as flattening `ResourceList` into 
`MemorySession.State`. While that is possible, that's a tricky step, given that 
the session state can be registered against a cleaner. One option, which I 
explored, would be to use `MemorySessionImpl` for reachability - which then has 
an impact on `ScopedMemoryAccess`, as we would have to add reachability fences 
on the session, as well as on the session state. In any case, I'd like to 
proceed by steps, since this cleanup was already getting big enough.


PR: https://git.openjdk.java.net/jdk/pull/9017

Reply via email to