Java 25 claims to have much awesomer AOT native code caching. See also #285 and https://github.com/temperlang/temper/compare/run-java25?expand=1 for things we've tried or explored.
But on manual exploration, I'm not seeing much win from the aot:
PS C:\Users\work2\Documents\projects\prismora> C:\Users\work2\Apps\OpenJDK25U-jdk_x64_windows_hotspot_25.0.3_9\jdk-25.0.3+9\bin\java --enable-native-access=ALL-UNNAMED -jar C:\Users\work2\Apps\temper-0.6.1-dev+14-g6351574-windows-x64\temper.jar watch
Watch starting build #0 at 2026-06-05T21:41:04.803Z
Finished build #0 in 14.329s
PS C:\Users\work2\Documents\projects\prismora> C:\Users\work2\Apps\OpenJDK25U-jdk_x64_windows_hotspot_25.0.3_9\jdk-25.0.3+9\bin\java --enable-native-access=ALL-UNNAMED -jar C:\Users\work2\Apps\temper-0.6.1-dev+14-g6351574-windows-x64\temper.jar watch
Watch starting build #0 at 2026-06-05T21:41:52.252Z
Finished build #0 in 18.535s
PS C:\Users\work2\Documents\projects\prismora> C:\Users\work2\Apps\OpenJDK25U-jdk_x64_windows_hotspot_25.0.3_9\jdk-25.0.3+9\bin\java -XX:AOTCacheOutput=temper.aot --enable-native-access=ALL-UNNAMED -jar C:\Users\work2\Apps\temper-0.6.1-dev+14-g6351574-windows-x64\temper.jar watch
Watch starting build #0 at 2026-06-05T21:43:19.424Z
Finished build #0 in 2m 27.243s
[165.849s][warning][aot] Skipping jdk/internal/event/Event: JFR event class
[165.900s][warning][aot] Skipping jdk/proxy1/$Proxy0: Unsupported location
[165.918s][warning][aot] Skipping jdk/proxy2/$Proxy3: Unsupported location
[165.955s][warning][aot] Skipping jdk/proxy2/$Proxy2: Unsupported location
[165.992s][warning][aot] Skipping jdk/proxy2/$Proxy1: Unsupported location
[166.050s][warning][aot] Skipping jdk/internal/event/SecurityProviderServiceEvent: JFR event class
Temporary AOTConfiguration recorded: temper.aot.config
Launching child process C:\Users\work2\Apps\OpenJDK25U-jdk_x64_windows_hotspot_25.0.3_9\jdk-25.0.3+9\bin\java to assemble AOT cache temper.aot using configuration temper.aot.config
Picked up JAVA_TOOL_OPTIONS: -Djava.class.path=C:\Users\work2\Apps\temper-0.6.1-dev+14-g6351574-windows-x64\temper.jar --enable-native-access=ALL-UNNAMED -XX:AOTCacheOutput=temper.aot -XX:AOTConfiguration=temper.aot.config -XX:AOTMode=create
Reading AOTConfiguration temper.aot.config and writing AOTCache temper.aot
AOTCache creation is complete: temper.aot 84672512 bytes
Removed temporary AOT configuration file temper.aot.config
PS C:\Users\work2\Documents\projects\prismora> C:\Users\work2\Apps\OpenJDK25U-jdk_x64_windows_hotspot_25.0.3_9\jdk-25.0.3+9\bin\java -XX:AOTCache=temper.aot --enable-native-access=ALL-UNNAMED -jar C:\Users\work2\Apps\temper-0.6.1-dev+14-g6351574-windows-x64\temper.jar watch
[0.872s][warning][aot,codecache,stubs] Saved blob's name 'LLLLLLLLLLLLL' is different from the expected name 'LLLLLLILLILLL'
[0.874s][warning][aot ] Failed to link AdapterHandlerEntry (fp=LLLLLLILLILLL) to its code in the AOT code cache
[0.878s][warning][aot,codecache,stubs] Saved blob's name 'LLLLLLILLILL' is different from the expected name 'LLLLLLLLIILL'
[0.905s][warning][aot ] Failed to link AdapterHandlerEntry (fp=LLLLLLLLIILL) to its code in the AOT code cache
Watch starting build #0 at 2026-06-05T21:47:40.912Z
Finished build #0 in 1m 12.201s
PS C:\Users\work2\Documents\projects\prismora> C:\Users\work2\Apps\OpenJDK25U-jdk_x64_windows_hotspot_25.0.3_9\jdk-25.0.3+9\bin\java -XX:AOTCache=temper.aot --enable-native-access=ALL-UNNAMED -jar C:\Users\work2\Apps\temper-0.6.1-dev+14-g6351574-windows-x64\temper.jar watch
[0.118s][warning][aot,codecache,stubs] Saved blob's name 'LLLLLLLLLLLLL' is different from the expected name 'LLLLLLILLILLL'
[0.118s][warning][aot ] Failed to link AdapterHandlerEntry (fp=LLLLLLILLILLL) to its code in the AOT code cache
[0.120s][warning][aot,codecache,stubs] Saved blob's name 'LLLLLLILLILL' is different from the expected name 'LLLLLLLLIILL'
[0.121s][warning][aot ] Failed to link AdapterHandlerEntry (fp=LLLLLLLLIILL) to its code in the AOT code cache
Watch starting build #0 at 2026-06-05T21:49:01.969Z
Finished build #0 in 35.299s
PS C:\Users\work2\Documents\projects\prismora> C:\Users\work2\Apps\OpenJDK25U-jdk_x64_windows_hotspot_25.0.3_9\jdk-25.0.3+9\bin\java -XX:AOTCache=temper.aot --enable-native-access=ALL-UNNAMED -jar C:\Users\work2\Apps\temper-0.6.1-dev+14-g6351574-windows-x64\temper.jar watch
[0.060s][warning][aot,codecache,stubs] Saved blob's name 'LLLLLLLLLLLLL' is different from the expected name 'LLLLLLILLILLL'
[0.061s][warning][aot ] Failed to link AdapterHandlerEntry (fp=LLLLLLILLILLL) to its code in the AOT code cache
[0.062s][warning][aot,codecache,stubs] Saved blob's name 'LLLLLLILLILL' is different from the expected name 'LLLLLLLLIILL'
[0.062s][warning][aot ] Failed to link AdapterHandlerEntry (fp=LLLLLLLLIILL) to its code in the AOT code cache
Watch starting build #0 at 2026-06-05T21:50:09.451Z
Finished build #0 in 26.760s
PS C:\Users\work2\Documents\projects\prismora> C:\Users\work2\Apps\OpenJDK25U-jdk_x64_windows_hotspot_25.0.3_9\jdk-25.0.3+9\bin\java --enable-native-access=ALL-UNNAMED -jar C:\Users\work2\Apps\temper-0.6.1-dev+14-g6351574-windows-x64\temper.jar watch
Watch starting build #0 at 2026-06-05T21:51:19.113Z
Finished build #0 in 33.615s
Java 25 claims to have much awesomer AOT native code caching. See also #285 and https://github.com/temperlang/temper/compare/run-java25?expand=1 for things we've tried or explored.
But on manual exploration, I'm not seeing much win from the aot: