I'm a big fan of JDK 21 with Helidon 4/Nima on the backend - most use cases covered, but very tight and light in dependencies and pretty much completely platform independent. You also have the option of compiling it AoT with GraalVM for a very quick-loading and low-memory near-native binary. Virtual threads mean much easier scaling, as you can do thread-per-request with a synchronous API. (Although I'm not sure if Graal supports java 21 yet, I'll have to check)