To the best of my knowledge, the HotSpot VM was the first managed runtime to popularize the idea of selective JIT compilation based on a live application execution profile. Basically, it only compiles to native code the repeatedly or frequently executed parts of the application — hot spots. The idea was so central to the design of the VM that it was reflected in its name. The HotSpot VM also continually collects lots of other information about the running program, enabling many object-oriented and traditional optimizations in the JIT compiler, such as inline substitution of method calls.
At the same time, all the widely used implementations of C and C++, the most ubiquitous among the statically (i.e. Ahead-Of-Time) compiled languages, also implement profile-guided optimization, or PGO for short. The only principal difference is that profiling occurs on the developer’s system, as a separate step of the build process, and the respective overhead is not passed over to all the end-user installations of the optimized application.
So it was just a matter of time before we would add PGO to our Ahead-Of-Time Java compiler. Please meet and greet PGO-enabled Excelsior JET 12, now available for early access:
Our tests show that PGO can deliver substantial application performance improvements, especially when combined with the Global Optimizer, which has finally found its way to the 64-bit x86 and ARM versions of the compiler. But we have also seen examples of PGO making no difference. Therefore we encourage you to try the beta against your applications, and would be most grateful for your feedback!