<div dir="ltr"><div><div><div><div><div><div><div><div><br></div>Hi Leyden devs,<br><br></div>I used CDS before with my Spring Boot application. I recently started to test Leyden with the recent released JDK24.01 (both GraalVM and Temurin). Likewise, I first want to test this<br></div>on my local laptop (Windows 11/intel i7), and try to implement this in my CI/CD to create the cache with a training run, probably with JDK25.<br><br></div>I run the following commands:<br><br>D:\test\graalvm-jdk-24.0.1+9.1\bin\java -XX:AOTMode=record -XX:AOTConfiguration=app.aotconf -jar gateway-5.1.0.jar<br>D:\test\graalvm-jdk-24.0.1+9.1\bin\java -XX:AOTMode=create -XX:AOTConfiguration=app.aotconf -XX:AOTCache=app.aot -jar gateway-5.1.0.jar<br>D:\test\graalvm-jdk-24.0.1+9.1\bin\java -XX:AOTCache=app.aot -jar gateway-5.1.0.jar<br><br></div>However, on the second command, I get these warnings/errors:<br><br>D:\test\jdk-24.0.1+9\bin\java -XX:AOTMode=create -XX:AOTConfiguration=app.aotconf -XX:AOTCache=app.aot -jar gateway-5.1.0.jar<br>[0.657s][warning][cds] Skipping jdk/internal/event/Event: JFR event class<br>[1.147s][warning][cds,heap] Archive heap points to a static field that may hold a different value at runtime:<br>[1.148s][warning][cds,heap] Field: java/lang/invoke/MethodHandleImpl$BindCaller::CD_Object_array<br>[1.150s][warning][cds,heap] Value: jdk.internal.constant.ArrayClassDescImpl<br>[1.150s][warning][cds,heap] {0x0000000605959028} - klass: 'jdk/internal/constant/ArrayClassDescImpl' - flags:<br>[1.150s][warning][cds,heap]<br>[1.151s][warning][cds,heap] - ---- fields (total size 3 words):<br>[1.151s][warning][cds,heap] - private final 'rank' 'I' @12 1 (0x00000001)<br>[1.152s][warning][cds,heap] - private final 'elementType' 'Ljava/lang/constant/ClassDesc;' @16 a 'jdk/internal/constant/ClassOrInterfaceDescImpl'{0x0000000605914380} (0xc0b22870)<br>[1.152s][warning][cds,heap] - private 'cachedDescriptorString' 'Ljava/lang/String;' @20 "[Ljava/lang/Object;"{0x0000000605959040} (0xc0b2b208)<br>[1.152s][warning][cds,heap] --- trace begin ---<br>[1.153s][warning][cds,heap] [ 0] {0x0000000605b73798} java.lang.Class (jdk.internal.constant.ConstantUtils::CD_Object_array)<br>[1.153s][warning][cds,heap] [ 1] {0x0000000605959028} jdk.internal.constant.ArrayClassDescImpl<br>[1.153s][warning][cds,heap] --- trace end ---<br>[1.153s][warning][cds,heap]<br>[1.154s][error ][cds,heap] Scanned 65968 objects. Found 1 case(s) where an object points to a static field that may hold a different value at runtime.<br>[1.154s][error ][cds ] An error has occurred while writing the shared archive file.<br><br></div>I'm not really sure if this error means I cannot use the cache, but I manually removed the
java/lang/invoke/MethodHandleImpl$BindCaller
from the AOTCache. After that, I can create the cache and start my application.<br></div><br></div>I still got this error and warning:<br><br>[0.026s][error][cds] CDS archive has aot-linked classes. It cannot be used when archived full module graph is not used.<br>[0.017s][warning][cds] shared class paths mismatch (hint: enable -Xlog:class+path=info to diagnose the failure)<div><br></div><div>It seems like the cache isn't properly applied, and I don't see a lot of startup time improvement (Is there a way to properly measure the difference between a normal run, and cached run?) I did measure it with timing, and find that cached run seems to be around 2 seconds fastes (from 8 seconds startup to 6 seconds startup). The test jar that I used can be downloaded from GitHub:<br><br><a href="https://github.com/assimbly/gateway/releases/tag/5.1.0Beta">https://github.com/assimbly/gateway/releases/tag/5.1.0Beta</a><br><br></div><div>I am creating the AOTCache properly? And how to mitigate such warnings/errors?<br><br></div><div>Raymond</div><div><br><br></div></div>