A program that consists solely of println("Hello, World!"); is pretty stateless and trivial, there's not much that a JIT could do with this.
Somewhat anecdotally, I remember hearing Rich Hickey talking about how the JVM JIT loves stateless code. I'm pretty sure the vast majority of Java code in use is deeply stateful. I don't know how much of a difference this actually makes but it seemed like a relevant data point.
FWIW, we went with go at my work instead of java because our application is memory-intensive, and there's huge gains there in go over java.