$ java --enable-native-access=ALL-UNNAMED -cp build/classes demo.Arenas == confined: one owner thread owner reads -> ok other thread reads -> WrongThreadException: Attempted access outside owning thread other thread closes -> WrongThreadException: Attempted access outside owning thread read after close -> IllegalStateException: Already closed close twice -> IllegalStateException: Already closed == shared: any thread, one close other thread reads -> ok other thread closes -> ok read after close -> IllegalStateException: Already closed == auto: the garbage collector frees it; close() is not allowed allocate 8 bytes -> ok close() -> UnsupportedOperationException: Attempted to close a non-closeable session == global: never freed; close() is not allowed allocate 8 bytes -> ok close() -> UnsupportedOperationException: Attempted to close a non-closeable session == bounds: a segment knows its size read int at offset 0 -> ok read int at offset 4 -> IndexOutOfBoundsException: Out of bound access on segment MemorySegment{ kind: native, address: 0x7fba74666600, byteSize: 4 }; new offset = 4; new length = 4 read long at offset 0 -> IndexOutOfBoundsException: Out of bound access on segment MemorySegment{ kind: native, address: 0x7fba74666600, byteSize: 4 }; new offset = 0; new length = 8