https://www.usenix.org/conference/atc22/presentation/khrabro...
https://developer.ibm.com/articles/jitserver-optimize-your-j...
It also has a "dynamic AOT compiler", so first-run stuff can be JITed and cached for future execution instead of it all starting out interpreted every time.
https://developer.ibm.com/tutorials/j-class-sharing-openj9/
Looks like maybe there is similar for OpenJDK & Oracle Java as of version 12 (I think it is?)
https://docs.oracle.com/en/java/javase/19/docs/specs/man/jav...