variant | Started in (s), each run | median -----------------------------------+----------------------------+--------- no tracking | 6.871,6.456,7.473,6.992 | 6.9315 BufferingApplicationStartup | 6.448,6.856,6.416,6.528 | 6.488 FlightRecorder + recording | 6.496,6.739,6.343,6.475 | 6.4855 lazy-initialization | 5.075,5.331,5.217,5.266 | 5.2415 === JDK 25 AOT cache (Project Leyden) === openjdk version "25.0.4.1" 2026-08-18 LTS -- training run (-XX:AOTMode=record) -- -rw-r--r-- 1 eloquent-blissful-maxwell eloquent-blissful-maxwell 119484416 Sep 4 23:44 /tmp/app.aotconf -- assembly run (-XX:AOTMode=create) -- Reading AOTConfiguration /tmp/app.aotconf and writing AOTCache /tmp/app.aot AOTCache creation is complete: /tmp/app.aot 118001664 bytes -rw-r--r-- 1 eloquent-blissful-maxwell eloquent-blissful-maxwell 118001664 Sep 4 23:44 /tmp/app.aot AOT cache (-XX:AOTCache) | 5.028,4.729,4.708,4.905 | 4.817 AOT cache + lazy | 3.649,3.488,3.354,3.384 | 3.436 === where the AOT cache takes the time from (same tracker, same jar) === run | parse ms | inst ms | webserver -----------------------+-----------+-----------+---------- plain | 986.66 | 4344.21 | 150.69 aotcache | 729.16 | 3155.96 | 100.96 Notes: * Timings are from one machine (Temurin 25.0.4.1+1, Linux x86_64, container) and are indicative. The ratios between rows are the point, not the absolute numbers. * "no tracking" and the two instrumented rows overlap. Recording startup steps is not measurably slower than not recording them on this application. * The AOT cache was trained on this exact jar with -XX:AOTMode=record and assembled with -XX:AOTMode=create. It is 118 MB and is invalidated by a classpath change.