jextract-25 early-access build (25-jextract+2-4) on JDK 25.0.5+8 against SQLite 3.45.1: 25 functions and 13 constants generated into 4 committed files (the whole header would be 83 files), a small Db wrapper, the four arena kinds used wrongly on purpose, ADDRESS vs C_POINTER zero-length vs unbounded segments and the SIGSEGV from getString on a NULL pointer, sqlite3_open out-parameter, return codes to exceptions, a sqlite3_exec upcall and the VM exit when it throws, the JDK 25 native-access warning and --illegal-native-access=deny, library loading failures, and a JMH benchmark of FFM vs hand-written JNI vs plain Java (indicative only: shared 2-CPU machine). Co-Authored-By: Claude Sonnet 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_017ic4b6Kg9RWSTJzyz6KP9X
22 lines
1.3 KiB
Plaintext
22 lines
1.3 KiB
Plaintext
$ 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
|